TRIM(), LTRIM() и RTRIM() в SQL — удаление лишних пробелов

TRIM() убирает пробелы (или заданные символы) по краям строки, а LTRIM и RTRIM — только слева или справа. Незаметные пробелы по краям ломают JOIN, GROUP BY и сравнения, поэтому чистка через TRIM — рутина перед любой агрегацией. В PostgreSQL и MySQL доступен полный синтаксис с LEADING/TRAILING/BOTH, а в SQLite — только упрощённая форма TRIM(X) / TRIM(X, Y).

Синтаксис

TRIM([LEADING | TRAILING | BOTH] [символы] FROM строка)

Примеры использования

Пример 1: Обрезать пробелы у имени

SELECT
  TRIM(name) AS name_clean
FROM users
LIMIT 2;

Результат:

name_clean
----------
Анна
Игорь

Пример 2: Убрать ведущие нули кода

SELECT
  TRIM(BOTH '0' FROM code) AS code_clean
FROM orders
LIMIT 2;

Результат:

code_clean
----------
451
78

Пример 3: Нормализовать ключ перед JOIN

SELECT
  TRIM(LOWER(email)) AS email_key
FROM users
LIMIT 2;

Результат:

email_key
-------------
anna@mail.ru
igor@mail.ru
Порешать SQL-задачи в тренажёре →

Типичная ошибка

По умолчанию TRIM убирает только пробелы — табуляции и переносы строк остаются, их чистят отдельно через REPLACE. В SQLite не поддерживается синтаксис TRIM(BOTH … FROM …): доступны лишь TRIM(X), TRIM(X, Y), LTRIM и RTRIM. Если аргумент NULL, результат тоже NULL.

Где спрашивают на собеседовании

На собесе всплывает при чистке данных перед JOIN и GROUP BY — пробелы по краям создают «фантомные» дубли групп. Идёт в паре с LOWER, REPLACE и COALESCE.

FAQ: частые вопросы про TRIM

Чем TRIM отличается от LTRIM и RTRIM?

TRIM по умолчанию срезает символы с обеих сторон (или с указанной через LEADING/TRAILING). LTRIM обрезает только слева, RTRIM — только справа. Когда нужно снять пробелы лишь с одного края, LTRIM/RTRIM точнее и понятнее.

Работает ли TRIM(BOTH '0' FROM code) в SQLite?

Нет, SQLite не понимает ключевые слова LEADING/TRAILING/BOTH и FROM. Используйте двухаргументную форму TRIM(code, '0') или LTRIM/RTRIM с указанием символов. Полный синтаксис работает в PostgreSQL и MySQL.

Как убрать табуляции и переносы строк?

TRIM по умолчанию работает только с пробелами. Передайте нужный символ явно, например TRIM(BOTH E'\t' FROM col) в PostgreSQL, либо предварительно замените табы и переносы через REPLACE, а затем примените TRIM.

Задачи в тренажёре по теме

Вопросы с собеседований по теме

Смежные темы SQL

Строковые функции · null-handling

Другие функции SQL

COALESCE · NULLIF · COUNT · SUBSTR · CAST · CONCAT

Открыть SQL-тренажёр (565 задач) →