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 :

Comment utiliser les expressions régulières dans les requêtes SQL?


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 17
    Points : 15
    Points
    15
    Par défaut Comment utiliser les expressions régulières dans les requêtes SQL?
    J'utilise une commande SQL assortie d'une RegEx pour sélectionner certains enregistrements qui contiennent la chaîne '[V1.2]', par exemple
    [V1.2]blablabla1
    [V1.2]blablabla2
    ...

    SELECT champ1, champ2 FROM table1 WHERE champ2 ~ '1\.2';

    Quelqu'un peut me dire pourquoi:
    - cette commande retourne la ligne même si elle ne reconnaît qu’un partie de la chaîne (pas besoin d’inclure .+ ou *)
    - il est impossible d’utiliser les crochets même avec le caractère d’échappatoire comme suit ‘\[‘

  2. #2
    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
    si tu met que 1\.2 ca te retourne tout ce qui contient 1.2 donc 1.22, 1.455, 1.2klmklm et meme klmfsd1.2klmkm

    il faut donc etre plus restrictif, si ton champ ne contient que [Vx.x], il faut mettre ^ pour dire qui commence par, et $ pour finir par.
    Pour les [ ] il faut les echapper ... 2 fois (oui etrange)


    Donc ca devrait marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT champ1, champ2 FROM table1 WHERE champ2 ~ '^\\[V1\.2\\]$'
    Delphi 2009 - ZeosLib - DevExpress - TMS - PgDAC
    PostgreSQL 8.4 sous Debian
    Sites : http://postgresql.developpez.com http://dgriessinger.developpez.com

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Merci hpalpha,

    non, en réalité, mon champ est constitué de valeurs qui contiennent [V1.2] suivi d'une foule de choses différentes.

    Mais je croyais que l'expression régulière devait absolument correspondre à toute la ligne, c'est à dire utiliser
    pour trouver [V1.2]blablabla, mais je réalise que l'expression régulière peut référer à une portion de la ligne pour retourner cette dernière.


    Pour ce qui est du double \\ devant les crochets, ça fonctionne! Mais je ne comprends pas la logique, as-tu l'explication?

  4. #4
    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
    en fait maintenant que j'y reflechit, je pense que c'est tout simplement a cause de la chaine qui interprete le formatage comme \t pour tabulation \r pour retour chariot.

    et donc ma requete etait donc pas reelement bonne \. est \\.

    une chaine qui n'interprete pas le formatage, c'est $quelquechose$mon texte$quelquechose$

    pour l'expression reg, pas besoin dans ton cas de specifier la fin (.+ pas utile)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT champ1, champ2 FROM table1 WHERE champ2 ~ '^\\[V1\\.2\\]'
     
    ou encore
     
    SELECT champ1, champ2 FROM table1 WHERE champ2 ~ $chaine$^\[V1\.2\]$chaine$
    dans le 2eme cas, on a pas besoin de dedoubler les \
    Delphi 2009 - ZeosLib - DevExpress - TMS - PgDAC
    PostgreSQL 8.4 sous Debian
    Sites : http://postgresql.developpez.com http://dgriessinger.developpez.com

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Ok, merci encore.

    Oui, en effet, j'ai aussi réalisé tout-à-l'heure qu'il faut utiliser le double 'backslash' devant tout caractère de contrôle

    Par contre, je n'ai pas réussi à faire fonctionner ta deuxième syntaxe (sans apostrophes).

  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
    je viens de tester ca marche, mais ca depend de la version de pg, > 8 c'est bon


    http://postgresql.developpez.com/doc...dollar-quoting
    Delphi 2009 - ZeosLib - DevExpress - TMS - PgDAC
    PostgreSQL 8.4 sous Debian
    Sites : http://postgresql.developpez.com http://dgriessinger.developpez.com

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Ok, super!

    Merci encore pour les trucs.

    Je suis nouveau sur ce forum et dans l'utilisation de PostgreSQL, et content d'avoir une ressource comme celle-ci, vraiment utilisée par des développeurs.

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/11/2014, 10h57
  2. Expressions régulières dans les macros
    Par Dionyzos dans le forum NetBeans
    Réponses: 0
    Dernier message: 26/03/2013, 11h56
  3. [RegEx] Perdu dans les expression régulières
    Par chatlumo dans le forum Langage
    Réponses: 5
    Dernier message: 01/06/2012, 15h44
  4. Réponses: 3
    Dernier message: 27/09/2010, 19h16
  5. [RegEx] Utiliser une expression régulière dans une requête
    Par Tobleron dans le forum Langage
    Réponses: 2
    Dernier message: 18/02/2007, 19h00

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