SELECT id, phone
FROM users
WHERE LENGTH(phone) <> 12;
Результат:
id | phone ---+------------- 15 | +7916123 23 | 89161234567
SELECT
event_id,
CHAR_LENGTH(payload) AS len
FROM events
ORDER BY len DESC
LIMIT 2;
Результат:
event_id | len ---------+----- 882 | 1024 571 | 640
SELECT
LENGTH('привет') AS bytes,
CHAR_LENGTH('привет') AS chars;
Результат:
bytes | chars ------+------ 12 | 6Порешать SQL-задачи в тренажёре →
Спрашивают при валидации форматов (телефон, ИНН, коды) и поиске обрезанных значений. Идёт в паре с TRIM (чтобы пробелы не искажали счёт) и SUBSTRING.
В MySQL LENGTH считает байты, а CHAR_LENGTH — символы, поэтому для многобайтовых символов (кириллица, эмодзи) они расходятся. В PostgreSQL и SQLite LENGTH уже возвращает число символов, а CHAR_LENGTH работает как синоним.
Используйте OCTET_LENGTH(str) — она вернёт число байтов, тогда как LENGTH(str) в Postgres считает символы. В MySQL наоборот: байты уже возвращает сам LENGTH(), а символы — CHAR_LENGTH().
Да, ведущие и конечные пробелы входят в подсчёт. Если нужна «содержательная» длина, оберните аргумент в TRIM: LENGTH(TRIM(col)). Учтите, что в колонках типа CHAR(n) некоторые СУБД дополняют строку пробелами.
STRING_AGG · COUNT · SUM OVER · SUBSTR · ROUND · CONCAT
Открыть SQL-тренажёр (565 задач) →