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 15/05/2007, 16h57   #1
Membre du Club
 
Inscription : février 2006
Messages : 134
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : février 2006
Messages : 134
Points : 48
Points : 48
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 :
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 :
1
2
 
elect * FROM TABLE WHERE label ~* 'label[(]2[)]';
Ceci marche bien , mais je pense qu'il existe une meuilleur solution ?
mikebranque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2007, 19h15   #2
Nouveau Membre du Club
 
Inscription : avril 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 28
Points : 25
Points : 25
sauf erreur de syntaxe, un truc du genre
Code :
SELECT * FROM TABLE WHERE label LIKE 'label(2)%';
didier2020 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2007, 21h43   #3
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
Le LIKE est effectivement le plus simple, je donne quand meme la version regex :

Code :
SELECT * FROM TABLE WHERE label ~* '^label\\(2\\)';
^ pour commence par

\\ pour l'echapement

pas testé mais ca devrait etre bon
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 08h35   #4
Membre du Club
 
Inscription : février 2006
Messages : 134
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : février 2006
Messages : 134
Points : 48
Points : 48
Merci pour les reponse
Code :
1
2
 
SELECT * FROM TABLE WHERE label ~* '^label\\(2\\)';
ca marche mais avec un warning :
Code :
1
2
 
WARNING:  nonstandard USE of \\ IN a string literal
mikebranque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 08h49   #5
Membre du Club
 
Inscription : février 2006
Messages : 134
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : février 2006
Messages : 134
Points : 48
Points : 48
Pouvez vous m'eclairer sur la sytaxe utiliser pour preceder les carateres :
+,-,[,],(,),{,}...
de
//
mikebranque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 10h03   #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
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 :
SELECT * FROM TABLE WHERE label ~* E'^label\\(2\\)';
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 11h37   #7
Membre du Club
 
Inscription : février 2006
Messages : 134
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : février 2006
Messages : 134
Points : 48
Points : 48
Pouvez m'en dire plus sur les warning:
ne posent t ils pas des problemes de performance
mikebranque 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 16h19.


 
 
 
 
Partenaires

Hébergement Web