запит WHERE до довжини символу?


79

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

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

Але це не працює ... чи може хтось показати мені правильний запит?

Відповіді:


132

На жаль, я не був впевнений, про яку платформу 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 |
+--------+-----------+----------------+

Будьте обережні, якщо ви маєте справу з багатобайтовими символами.


1
Синтаксис MySQL такий же, як синтаксис SQLite. Відмінно працював для мене.
Джон

4
У postgres ви можете використовувати функцію "length", як у mysql
alexey_efimov

3
Обережно! У багатобайтових наборах символів це може бути інакше. Дивіться це
Пауло Буено


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.