Page 1 sur 1

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

Posté : 29 mars 2007, 15:13
par martial
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!!

Posté : 29 mars 2007, 15:33
par Ryle
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

Posté : 29 mars 2007, 16:24
par martial
Mille Gracié....ça marche!

Posté : 30 mars 2007, 09:19
par Hubert Roksor
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 '_____'

Posté : 30 mars 2007, 12:55
par sharep98
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)