web-dev-qa-db-fra.com

interroger la condition WHERE à la longueur de caractère?

J'ai une base de données avec un grand nombre de mots mais je veux sélectionner uniquement les enregistrements dont la longueur de caractère est égale à un nombre donné (dans l'exemple 3):

$query = ("SELECT * FROM $db WHERE conditions AND length = 3");

Mais cela ne fonctionne pas ... quelqu'un peut-il me montrer la requête correcte?

59
faq

Désolé, je ne savais pas de quelle plate-forme SQL vous parlez:

En MySQL:

$query = ("SELECT * FROM $db WHERE conditions AND LENGTH(col_name) = 3");

dans MSSQL

$query = ("SELECT * FROM $db WHERE conditions AND LEN(col_name) = 3");

La fonction LENGTH () (MySQL) ou LEN () (MSSQL) renvoie la longueur d'une chaîne dans une colonne que vous pouvez utiliser comme condition dans votre clause WHERE.

Éditer

Je sais que c'est vraiment vieux, mais je pensais élargir ma réponse car, comme Paulo Bueno l'a fait remarquer à juste titre, vous voulez probablement le nombre de caractères par opposition au nombre d'octets. Merci Paulo.

Donc, pour MySQL, il y a la CHAR_LENGTH(). L'exemple suivant met en évidence la différence entre LENGTH() et CHAR_LENGTH():

CREATE TABLE words (
    Word VARCHAR(100)
) ENGINE INNODB DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

INSERT INTO words(Word) VALUES('快樂'), ('happy'), ('hayır');

SELECT Word, LENGTH(Word) as num_bytes, CHAR_LENGTH(Word) AS num_characters FROM words;

+--------+-----------+----------------+
| Word   | num_bytes | num_characters |
+--------+-----------+----------------+
| 快樂    |         6 |              2 |
| happy  |         5 |              5 |
| hayır  |         6 |              5 |
+--------+-----------+----------------+

Faites attention si vous avez affaire à des caractères multi-octets.

103
93196.93

Je pense que tu veux ça:

select *
from dbo.table
where DATALENGTH(column_name) = 3
4
Irish Lass
SELECT *
   FROM   my_table
   WHERE  substr(my_field,1,5) = "abcde";
1
ennuikiller