IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Problème de REGEXP SQL


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 61
    Par défaut
    bonjour à tous,

    j'ai dans une table FILMS un champ TITRE. je veux extraire les TITRE de films commençant par A en omettant à chaque fois les LE|LA|LES|UN|UNE|DES en utilisant un REGEXP sur un select mais je rame un peu.

    pouvez-vous m'aider, SVP ?

    Y a moyen de faire plus léger que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       1. SELECT title, REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( title, 'Les ', '' ) , 'La ', '' ) , 'Le ', '' ) , 'L\'', '' ) , 'Des ', '' ) , 'Une ', '' ) , 'Un ', '' ) AS FilmTitle
       2. FROM table_films
       3. HAVING FilmTitle LIKE 'A%'
    ?

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    HAVING s'emploie avec GROUP BY !

    Essaie comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT title
    FROM table_films
    WHERE 
      CASE 
        WHEN SUBSTRING(title FROM 1 FOR 3) IN ('Le ', 'La ', 'Un ') THEN SUBSTRING(title FROM 4 FOR 1) = 'a'
        WHEN SUBSTRING(title FROM 1 FOR 4) IN ('Les ', 'Des ', 'Une ') THEN SUBSTRING(title FROM 5 FOR 1) = 'a'
        ELSE SUBSTRING(title FROM 1 FOR 1) = 'A'
      END
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 61
    Par défaut
    Enorme !
    je ne savais pas qu'on pouvait avoir un case en SQL et j'apprends également la syntaxe pour le substring

    Merci à toi

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 61
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    HAVING s'emploie avec GROUP BY !

    Essaie comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT title
    FROM table_films
    WHERE 
      CASE 
        WHEN SUBSTRING(title FROM 1 FOR 3) IN ('Le ', 'La ', 'Un ') THEN SUBSTRING(title FROM 4 FOR 1) = 'a'
        WHEN SUBSTRING(title FROM 1 FOR 4) IN ('Les ', 'Des ', 'Une ') THEN SUBSTRING(title FROM 5 FOR 1) = 'a'
        ELSE SUBSTRING(title FROM 1 FOR 1) = 'A'
      END
    le group by est optionnel pour HAVING.
    mais ton truc fonctionne plutot pas mal

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par sebnutt Voir le message
    le group by est optionnel pour HAVING.
    HAVING est un WHERE qui opère sur le résultat d'un regroupement donc il s'emploie avec un regroupement donc avec un GROUP BY !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. [SQLserver2000][SQLServer CE] problème de requête SQL
    Par JBernn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/01/2005, 09h29
  2. [Interbase] Problème de syntaxe SQL
    Par navis84 dans le forum InterBase
    Réponses: 4
    Dernier message: 22/12/2004, 17h07
  3. Problème de requète SQL dans un Requery
    Par Keraccess dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 22/10/2004, 14h58
  4. Problème Access to Sql Server
    Par vuldos dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/08/2004, 15h56
  5. Réponses: 3
    Dernier message: 18/11/2002, 16h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo