Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/12/2007, 23h08   #1
Invité régulier
 
Inscription : décembre 2007
Messages : 17
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : décembre 2007
Messages : 17
Points : 9
Points : 9
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 ‘\[‘
3000trees est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2007, 07h57   #2
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
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 :
1
2
 
SELECT champ1, champ2 FROM table1 WHERE champ2 ~ '^\\[V1\.2\\]$'
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2007, 21h41   #3
Invité régulier
 
Inscription : décembre 2007
Messages : 17
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : décembre 2007
Messages : 17
Points : 9
Points : 9
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?
3000trees est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2007, 22h49   #4
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
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 :
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 \
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2007, 23h00   #5
Invité régulier
 
Inscription : décembre 2007
Messages : 17
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : décembre 2007
Messages : 17
Points : 9
Points : 9
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).
3000trees est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2007, 23h22   #6
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
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
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2007, 23h26   #7
Invité régulier
 
Inscription : décembre 2007
Messages : 17
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : décembre 2007
Messages : 17
Points : 9
Points : 9
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.
3000trees est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h39.


 
 
 
 
Partenaires

Hébergement Web