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

PostgreSQL Discussion :

expression reguliere postgres


Sujet :

PostgreSQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2006
    Messages : 134
    Points : 81
    Points
    81
    Par défaut expression reguliere postgres
    Bonjour.

    Imaginons une table : table ( id , label ).
    Je souhaite selectionnertout les elements qui commencent par label(2).
    Pour des soucis de performance j'utilse une expression régulière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from table where label ~* 'label(2)';
    Le probléme est que les parathèses vont être interprétées comme expressions régulières, donc pas le bon resultat.
    Il en va de meme pour les caracteres +,-,[,],(,),{,}...

    Une solution consiste trasnformer '( 'en '[(] ' et ')' en '[)]', la requéte devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    elect * from table where label ~* 'label[(]2[)]';
    Ceci marche bien , mais je pense qu'il existe une meuilleur solution ?

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 28
    Points : 30
    Points
    30
    Par défaut
    sauf erreur de syntaxe, un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM table WHERE label LIKE 'label(2)%';

  3. #3
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    Le LIKE est effectivement le plus simple, je donne quand meme la version regex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM TABLE WHERE label ~* '^label\\(2\\)';
    ^ pour commence par

    \\ pour l'echapement

    pas testé mais ca devrait etre bon
    Delphi 2009 - ZeosLib - DevExpress - TMS - PgDAC
    PostgreSQL 8.4 sous Debian
    Sites : http://postgresql.developpez.com http://dgriessinger.developpez.com

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2006
    Messages : 134
    Points : 81
    Points
    81
    Par défaut
    Merci pour les reponse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM TABLE WHERE label ~* '^label\\(2\\)';
    ca marche mais avec un warning :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WARNING:  nonstandard use of \\ in a string literal

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2006
    Messages : 134
    Points : 81
    Points
    81
    Par défaut
    Pouvez vous m'eclairer sur la sytaxe utiliser pour preceder les carateres :
    +,-,[,],(,),{,}...
    de
    //

  6. #6
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    L'histoire de l'echappement est un probleme purrement historique, je t'invite a regarder dans la doc.

    sinon pour ne plus avoir le message d'erreur, met E devant le quote :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM TABLE WHERE label ~* E'^label\\(2\\)';
    Delphi 2009 - ZeosLib - DevExpress - TMS - PgDAC
    PostgreSQL 8.4 sous Debian
    Sites : http://postgresql.developpez.com http://dgriessinger.developpez.com

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2006
    Messages : 134
    Points : 81
    Points
    81
    Par défaut
    Pouvez m'en dire plus sur les warning:
    ne posent t ils pas des problemes de performance

Discussions similaires

  1. [langage] [Expression][Régulière] motif
    Par Cyspak dans le forum Langage
    Réponses: 4
    Dernier message: 23/09/2003, 14h24
  2. [langage] [debutant] expression reguliere
    Par toto_titi dans le forum Langage
    Réponses: 3
    Dernier message: 01/07/2003, 09h45
  3. Réponses: 2
    Dernier message: 16/06/2003, 15h15
  4. [langage] surement une expression régulière...
    Par armada dans le forum Langage
    Réponses: 5
    Dernier message: 30/05/2003, 17h06
  5. [langage] expression reguliere motif répétitif dans 1 pattern
    Par comme de bien entendu dans le forum Langage
    Réponses: 11
    Dernier message: 09/04/2003, 16h14

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