LTRIM: примеры (SQL)
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.
DECLARE @input varchar(20) = ' Значение';
SELECT * FROM Products WHERE LTRIM(ProductName) = LTRIM(@input);Использование в составе более сложного строкового выражения.
SELECT '[' + LTRIM(' Строка в скобках ') + ']' AS Result;Result ------------------------- [Строка в скобках ]
Обработка данных в операторе UPDATE для очистки значений в столбце.
UPDATE Customers
SET LastName = LTRIM(LastName)
WHERE LastName LIKE ' %';Применение в вычисляемом столбце для автоматической очистки вставляемых данных.
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.
DECLARE @str varchar(20) = '0000123';
SELECT SUBSTRING(@str, PATINDEX('%[^0]%', @str), LEN(@str)) AS Result; -- Удаляет ведущие нулиResult ------ 123
Использование в сочетании с другими строковыми функциями для форматирования.
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 может удалять не только пробелы, но и другие заданные символы.