запрашивать ГДЕ условие для длины символа? - PullRequest
58 голосов
/ 24 июля 2011

У меня есть база данных с большим количеством слов, но я хочу выбрать только те записи, в которых длина символа равна заданному числу (в примере 3):

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

Но это делаетне работает ... кто-то может показать мне правильный запрос?

Ответы [ 3 ]

101 голосов
/ 24 июля 2011

Извините, я не уверен, о какой платформе SQL вы говорите:

В MySQL:

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

в MSSQL

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

Функция LENGTH () (MySQL) или LEN () (MSSQL) возвращает длину строки в столбце, которую можно использовать в качестве условия в предложении WHERE.

Редактировать

Я знаю, что это действительно старо, но подумал, что расширю свой ответ, потому что, как справедливо заметил Пауло Буэно, вам, скорее всего, нужно количество символов, а не количество байтов. Спасибо, Пауло.

Итак, для MySQL есть CHAR_LENGTH(). В следующем примере подчеркивается разница между LENGTH() и 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 |
+--------+-----------+----------------+

Будьте осторожны, если имеете дело с многобайтовыми символами.

3 голосов
/ 13 июля 2016

Я думаю, вы хотите это:

select *
from dbo.table
where DATALENGTH(column_name) = 3
1 голос
/ 24 июля 2011
SELECT *
   FROM   my_table
   WHERE  substr(my_field,1,5) = "abcde";
...