LTRIM: примеры (SQL)

Руководство по использованию LTRIM в SQL Server
Раздел: Строковые функции, Строковые
LTRIM(character_expression): string

Основы функции LTRIM

Функция LTRIM в Microsoft SQL Server предназначена для удаления начальных (левых) пробелов из строкового выражения. Это одна из базовых функций для работы со строками, которая часто используется при очистке и подготовке данных, импортированных из внешних источников, где возможно наличие нежелательных пробелов в начале значений.

Функция принимает один аргумент:

  • character_expression: Выражение символьного или двоичного типа данных. Это может быть константа, переменная или столбец символьного типа (char, varchar, nchar, nvarchar, text, ntext). Если аргумент имеет тип, отличный от строкового, он неявно преобразуется в тип varchar, если это возможно.

Возвращаемое значение имеет тип, совпадающий с типом входного аргумента, за исключением типа text, для которого возвращается varchar. Если входной аргумент равен NULL, функция также возвращает NULL.

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

Базовый пример удаления пробелов в начале строки.

SELECT LTRIM('   Текст с пробелами.') AS Result;
Result
----------------
Текст с пробелами.

Использование с данными из столбца таблицы.

CREATE TABLE #Temp (Note varchar(50));
INSERT INTO #Temp VALUES ('   Запись 1'), ('  Запись 2'), ('Запись 3');
SELECT Note AS Original, LTRIM(Note) AS Trimmed FROM #Temp;
Original        Trimmed
--------------- ---------------
   Запись 1     Запись 1
  Запись 2      Запись 2
Запись 3        Запись 3

Работа с аргументом NULL.

SELECT LTRIM(NULL) AS Result;
Result
------
NULL

Похожие функции в MS SQL Server

  • RTRIM(character_expression): Удаляет завершающие (правые) пробелы из строки. Часто используется в паре с LTRIM для полной обрезки пробелов с двух сторон: LTRIM(RTRIM(column)).
  • TRIM( [ characters FROM ] string ): Функция, появившаяся в SQL Server 2017. Удаляет указанные символы (по умолчанию пробел) с обоих концов строки. Она является более универсальной заменой для связки LTRIM(RTRIM()) и позволяет удалять не только пробелы, но и любые другие символы.

Выбор функции зависит от задачи. LTRIM применяется, когда необходимо удалить пробелы только в начале строки. TRIM предпочтительнее для удаления пробелов с обоих концов, особенно в версиях 2017 и выше, из-за более читаемого синтаксиса. Для удаления конкретных символов с определенной стороны до версии 2017 используются комбинации функций LEFT, RIGHT и SUBSTRING.

Типичные ошибки и нюансы

1. Ожидание удаления символов, отличных от пробела. Стандартная LTRIM в MS SQL удаляет только символ пробела (ASCII 32).

SELECT LTRIM('***Текст') AS Result;
Result
-------
***Текст

2. Неявное преобразование типов может привести к потере данных или ошибке, если оно невозможно.

SELECT LTRIM(123) AS Result; -- Целое число неявно преобразуется в строку '123'
SELECT LTRIM(GETDATE()) AS Result; -- Дата преобразуется в строку, пробелы в начале маловероятны.

3. Функция не удаляет другие whitespace-символы, такие как табуляция или перевод строки.

SELECT LTRIM(CHAR(9) + 'Текст') AS Result; -- CHAR(9) это табуляция
Result (может выглядеть как отступ)
        Текст

4. Частая ошибка - попытка очистить NULL, что всегда возвращает NULL, что может нарушить логику.

История изменений функции

Самой функции LTRIM не было существенных изменений в последних версиях SQL Server. Её поведение остается стабильным и обратно совместимым.

Важным изменением в экосистеме строковых функций стало введение в SQL Server 2017 (и Azure SQL Database) функции TRIM(). Она стандартизирована по синтаксису SQL:2008 и предоставляет более мощную и читаемую альтернативу для удаления пробелов или указанных символов с обоих концов строки. Например, TRIM(' ' FROM ' текст ').

Это изменение делает код, выполняющий обрезку пробелов с двух сторон, более лаконичным и понятным по сравнению с традиционной конструкцией LTRIM(RTRIM(column)). Однако LTRIM по-прежнему актуальна для случаев, когда требуется удалить пробелы только с левой стороны.

Расширенные примеры применения

Удаление пробелов при сравнении строк, например, в условии WHERE.

Пример sql
DECLARE @input varchar(20) = '  Значение';
SELECT * FROM Products WHERE LTRIM(ProductName) = LTRIM(@input);

Использование в составе более сложного строкового выражения.

Пример sql
SELECT '[' + LTRIM('   Строка в скобках   ') + ']' AS Result;
Result
-------------------------
[Строка в скобках   ]

Обработка данных в операторе UPDATE для очистки значений в столбце.

Пример sql
UPDATE Customers
SET LastName = LTRIM(LastName)
WHERE LastName LIKE ' %';

Применение в вычисляемом столбце для автоматической очистки вставляемых данных.

Пример sql
CREATE TABLE Contacts (
    RawName varchar(100),
    CleanName AS LTRIM(RawName) PERSISTED
);
INSERT INTO Contacts VALUES ('   Иван Петров');
SELECT * FROM Contacts;
RawName          CleanName
---------------- -----------------
   Иван Петров   Иван Петров

Эмуляция удаления конкретных символов слева до SQL Server 2017 с помощью PATINDEX и STUFF/SUBSTRING.

Пример sql
DECLARE @str varchar(20) = '0000123';
SELECT SUBSTRING(@str, PATINDEX('%[^0]%', @str), LEN(@str)) AS Result; -- Удаляет ведущие нули
Result
------
123

Использование в сочетании с другими строковыми функциями для форматирования.

Пример sql
SELECT LTRIM(UPPER('   lowercase text')) AS Result;
Result
---------------
LOWERCASE TEXT

Аналоги функции в других СУБД и языках

MySQL, MariaDB: Функция LTRIM() работает аналогично. Существует также TRIM().

-- MySQL
SELECT LTRIM('   пример');
'пример'

Oracle: Функция LTRIM() обладает расширенной функциональностью: вторым необязательным аргументом можно задать набор удаляемых символов.

-- Oracle
SELECT LTRIM('xxxПример', 'x') FROM dual;
'Пример'

PostgreSQL: Функция LTRIM() также поддерживает указание удаляемых символов. Есть функция TRIM().

-- PostgreSQL
SELECT LTRIM('zzzТекст', 'z');
'Текст'

SQLite: Имеется функция LTRIM() с возможностью указания набора символов.

-- SQLite
SELECT ltrim('...Начало', '.');
'Начало'

Sybase ASE, ASA: Функция LTRIM() аналогична MS SQL.

Таким образом, в отличие от MS SQL, во многих других реализациях SQL функция LTRIM может удалять не только пробелы, но и другие заданные символы.

MS SQL LTRIM function comments

En
LTRIM Returns a character expression after it removes leading blanks