recherche d'un nombre exact de caractéres dans une chaine

Eléphant du PHP | 89 Messages

29 mars 2007, 15:13

Bonjour à tous
Aprés avoir recherché en vain dans le forum, je souhaiterais que quelqu'un m'aide à formuler la requête Mysql suivante:

Je souhaite extraire d'un champ d'une table tous ceux qui contiennent exactement 5 caractéres !
ex: colis N° 12345
colis N° 22AB3
colis N° RRT77
Merci pour votre aide!!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

29 mars 2007, 15:33

Pour connaitre la longueur d'une donnée en base, il te suffit d'utiliser la fonction LENGTH() de SQL :)

http://dev.mysql.com/doc/refman/5.0/en/ ... tions.html

Il ne reste donc plus qu'à utiliser cette fonction dans la clause WHERE de ta requête en spécifiant le champ et la taille souhaitée :)

Code : Tout sélectionner

... WHERE LENGTH(mon_champ) = 5
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 89 Messages

29 mars 2007, 16:24

Mille Gracié....ça marche!

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

30 mars 2007, 09:19

Au fait, à tout hasard j'ai essayé de le formuler différemment pour voir si c'était plus rapide, et la réponse est non (c'est identique), il n'y a probablement pas de façon plus efficace de le faire. (à part bien sûr en changeant le type de données en nombre, etc...) Je vous laisse ma solution "alternative" pour la postérité.

Code : Tout sélectionner

SELECT * FROM matable WHERE mon_champ LIKE '_____'

Eléphanteau du PHP | 20 Messages

30 mars 2007, 12:55

Une précision toutefois : LENGTH() renvoie le nombre d'OCTETS occupés par une chaîne. Ce nombre dépend du jeu de caractères utilisé (latin1, utf8, etc). Pour connaître le nombre de caractères, il faut utiliser CHAR_LENGTH().

Exemple :

Code : Tout sélectionner

CREATE TABLE t1 (name char(10) character set utf8)) INSERT INTO t1 VALUES('àùèë'); SELECT name, LENGTH(name), CHAR_LENGTH(name) FROM t1; +------+--------------+-------------------+ | name | LENGTH(name) | CHAR_LENGTH(name) | +------+--------------+-------------------+ | àùèë | 11 | 4 | +------+--------------+-------------------+ 1 row in set (0.00 sec)
Pierre Dumont
Formateur Linux / MySQL
http://www.anaska.com
Tel : 01 45 28 09 82 / Fax : 01 45 28 72 39