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 10/10/2007, 17h36   #1
Invité de passage
 
Inscription : septembre 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 5
Points : 1
Points : 1
Par défaut [DEBUTANT] Postgresql et underscore

Bonjour,
J'ai une colonne filename avec des noms assez variés contenant un underscore du type : monfichier_200710.txt ou monfichieraa_200710.txt ou encore monfichierxx_200710.txt.
Je désire faire un :
SELECT filename FROM table
WHERE filename NOT LIKE 'monfichier_';
Pour avoir uniquement les monfichieraa_200710.txt et les monfichierxx_200710.txt mais vu que le underscore est un caractère réservé, il me retourne 0 réponse et, évidemment, le LIKE 'monfichier_' me les retourne tous.
Existe-t-il un REGEX pour que le underscore ne soit pas vu comme un caractère spécial de Postgresql ?
J'utilise un Postgresql 8.0.

Merci beaucoup pour votre aide.
Cordialement.
kanenk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2007, 00h29   #2
Membre habitué
 
Inscription : août 2007
Messages : 128
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 128
Points : 146
Points : 146
Il faut placer un \ avant le _ comme l'indique la documentation :
http://www.postgresql.org/docs/8.0/s...FUNCTIONS-LIKE
gleu_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2007, 11h33   #3
Invité de passage
 
Inscription : septembre 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 5
Points : 1
Points : 1
Merci pour la réponse mais j'ai déjà essayé avec un '\_', ça ne fonctionne pas. J'ai aussi essayé de mettre un ESCAPE '' pour dédifférencier le underscore et essayé '%monfichier\137%' pour la valeur en octal de l'underscore mais ça ne passe pas non plus .

Merci pour l'aide.
kanenk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2007, 14h54   #4
Invité de passage
 
Inscription : septembre 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 5
Points : 1
Points : 1
Je vous envoie ce que j'ai essayé si ça peut vous aider :
Code :
1
2
3
4
5
6
7
8
9
10
test=# select * from table1 where label like '%valeur\_%';
 id |   label    
----+------------
  1 | valeur_1  
  2 | valeur_2  
  3 | valeur_3  
  4 | valeuraa_3
  5 | valeuraa_5
  6 | valeurxx_6
(6 rows)
ou même :
Code :
1
2
3
4
5
6
7
8
9
10
test=# select * from table1 where label similar to '%valeur\_%';
 id |   label    
----+------------
  1 | valeur_1  
  2 | valeur_2  
  3 | valeur_3  
  4 | valeuraa_3
  5 | valeuraa_5
  6 | valeurxx_6
(6 rows)
Il me retourne la totalité alors que je ne veux que les 3 premières valeurs. Idem lorsque j'essaie en octal ou avec le ESCAPE ''
Code :
1
2
3
4
5
6
7
8
9
10
test=# select * from table1 where label similar to '%valeur\137%';
 id |   label    
----+------------
  1 | valeur_1  
  2 | valeur_2  
  3 | valeur_3  
  4 | valeuraa_3
  5 | valeuraa_5
  6 | valeurxx_6
(6 rows)
kanenk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2007, 15h14   #5
Membre régulier
 
Inscription : avril 2007
Messages : 81
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2007
Messages : 81
Points : 91
Points : 91
Envoyer un message via MSN à sefaxe82
essaye en répétant deux fois \
Code :
SELECT * FROM table1 WHERE label LIKE '%valeur\\_%';
sefaxe82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2007, 15h36   #6
Invité de passage
 
Inscription : septembre 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 5
Points : 1
Points : 1
Ca a l'air de bien fonctionner avec le '\\_'.
Merci beaucoup pour l'aide !

(C'est tout de même étrange qu'il faille mettre 2 antislashes, sous MySQL, j'ai juste eu à en mettre qu'un seul et cela suffisait.)

Bien cordialement.
kanenk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2007, 15h54   #7
Membre régulier
 
Inscription : avril 2007
Messages : 81
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2007
Messages : 81
Points : 91
Points : 91
Envoyer un message via MSN à sefaxe82
spécifité de postgres...
a+
sefaxe82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2007, 16h18   #8
Membre habitué
 
Inscription : août 2007
Messages : 128
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 128
Points : 146
Points : 146
La seule solution que je vois est de spécifier le caractère d'échappement, de cette façon :

Code :
SELECT * FROM table1 WHERE label LIKE '%valeur|_%' ESCAPE '|';
gleu_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2007, 22h31   #9
Invité de passage
 
Inscription : septembre 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 5
Points : 1
Points : 1
Oui, cette méthode aussi fonctionne très bien.
Je vous remercie beaucoup pour votre aide.

Cordialement.
Kane.
kanenk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h33.


 
 
 
 
Partenaires

Hébergement Web