LEFT: примеры (SQL)
LEFT(character_expression, integer_expression): varcharФункция LEFT в MS SQL Server
Функция LEFT принадлежит к категории строковых функций в Microsoft SQL Server и предназначена для извлечения указанного количества символов с начала строки. Эта функция применяется в ситуациях, когда требуется получить префикс строкового значения, например, для получения кодов, аббревиатур, первых символов текстовых полей или для обработки данных с фиксированной структурой.
Синтаксис функции имеет следующий вид: LEFT ( character_expression , integer_expression ).
- character_expression: исходное строковое выражение. Может быть константой, переменной или столбцом символьного или двоичного типа данных. Типы данных text, ntext и image не поддерживаются, их необходимо явно преобразовывать в varchar(max) или nvarchar(max).
- integer_expression: положительное целое число, определяющее количество возвращаемых символов. Если значение является типом bigint или отрицательным числом, возникает ошибка. Если аргумент превышает длину строки, функция возвращает всю исходную строку. Если аргумент равен нулю, возвращается пустая строка.
Возвращаемый тип данных соответствует типу аргумента character_expression. Для входных данных типа varchar возвращается varchar, для nvarchar – nvarchar, а для varbinary – varbinary.
Простые примеры использования
Ниже приведены базовые примеры применения функции LEFT с разными параметрами.
Пример 1: Извлечение первых символов строки
SELECT LEFT('Microsoft SQL Server', 9) AS Result;Result ----------- Microsoft
Пример 2: Аргумент больше длины строки
SELECT LEFT('SQL', 10) AS Result;Result ----------- SQL
Пример 3: Использование с целым числом ноль
SELECT LEFT('Пример текста', 0) AS Result;Result -----------
Пример 4: Работа с данными столбца таблицы
CREATE TABLE #Products (ProductCode VARCHAR(10));
INSERT INTO #Products VALUES ('ABCD12345'), ('XYZ987');
SELECT ProductCode, LEFT(ProductCode, 4) AS ProductPrefix FROM #Products;
DROP TABLE #Products;ProductCode ProductPrefix ----------- -------------- ABCD12345 ABCD XYZ987 XYZ9
Похожие функции в MS SQL Server
В SQL Server доступны другие строковые функции для работы с частями строки:
- RIGHT(character_expression, integer_expression): извлекает указанное количество символов с конца строки. Применяется аналогично LEFT, но для суффиксов.
- SUBSTRING(expression, start, length): возвращает подстроку из строки, начиная с заданной позиции и указанной длины. Более универсальна, так как позволяет извлекать подстроку из любой части строки.
- CHARINDEX(substring, string [, start_location]): находит начальную позицию подстроки в строке. Часто используется совместно с SUBSTRING для извлечения текста между определенными символами.
Функцию LEFT предпочтительнее использовать, когда нужно получить именно начало строки, так как ее синтаксис проще и нагляднее. SUBSTRING применяется в более сложных случаях, когда позиция извлечения не фиксирована или вычисляется динамически.
Аналоги в других СУБД и языках
Аналоги функции LEFT существуют во многих системах управления базами данных, но с некоторыми отличиями в синтаксисе.
MySQL:
SELECT LEFT('Пример строки', 7);Результат: 'Пример'
PostgreSQL:
SELECT LEFT('Пример строки', 7);Результат: 'Пример'
В PostgreSQL также доступна функция SUBSTRING с аналогичным поведением.
Oracle:
В Oracle отсутствует встроенная функция LEFT. Вместо нее используется SUBSTR.
SELECT SUBSTR('Пример строки', 1, 7) FROM dual;Результат: 'Пример'
SQLite:
SQLite также не имеет функции LEFT. Используется SUBSTR.
SELECT SUBSTR('Пример строки', 1, 7);Результат: 'Пример'
Python (в контексте обработки строк):
text = "Пример строки"
result = text[:7]
print(result)'Пример'
Типичные ошибки
При работе с функцией LEFT могут возникать следующие ошибки.
Ошибка 1: Отрицательное значение второго аргумента
SELECT LEFT('Test', -1);Сообщение об ошибке: "The second argument of the LEFT function must be a positive integer."
Ошибка 2: Использование нецелочисленного типа
SELECT LEFT('Test', 3.7);Функция работает, но происходит неявное преобразование числа с плавающей точкой к целому (усечение до 3). Лучше использовать явное приведение.
Ошибка 3: Передача значения NULL
SELECT LEFT(NULL, 5) AS Result1, LEFT('Text', NULL) AS Result2;Result1 Result2 ------- ------- NULL NULL
При любом NULL аргументе функция возвращает NULL.
Изменения в последних версиях
В последних версиях Microsoft SQL Server (начиная с SQL Server 2012) функция LEFT не претерпела значительных изменений в поведении или синтаксисе. Основные улучшения связаны с оптимизацией производительности в рамках общего развития ядра СУБД. В SQL Server 2017 и более поздних версиях функция корректно работает с данными в кодировке UTF-8 при использовании соответствующих параметров сортировки.
Расширенные примеры
Пример 1: Динамическое определение длины префикса
DECLARE @text NVARCHAR(100) = 'Главный офис: Москва';
DECLARE @delimiter CHAR(1) = ':';
SELECT LEFT(@text, CHARINDEX(@delimiter, @text) - 1) AS Location;Location ----------- Главный офис
Пример 2: Использование в сочетании с другими функциями
SELECT
Email,
LEFT(Email, CHARINDEX('@', Email) - 1) AS UserName
FROM (VALUES ('user@example.com'), ('admin@test.ru')) AS T(Email);Email UserName ---------------- --------- user@example.com user admin@test.ru admin
Пример 3: Обработка данных с фиксированной длиной поля
SELECT
Code,
LEFT(Code + '00000', 5) AS NormalizedCode
FROM (VALUES ('A1'), ('BC23'), ('DEF')) AS Codes(Code);Code NormalizedCode ---- --------------- A1 A1000 BC23 BC230 DEF DEF00
Пример 4: Рекурсивное использование в CTE
WITH SplitWords AS (
SELECT 'Один,Два,Три' AS Str, 1 AS Pos
UNION ALL
SELECT
SUBSTRING(Str, CHARINDEX(',', Str) + 1, LEN(Str)),
Pos + 1
FROM SplitWords
WHERE CHARINDEX(',', Str) > 0
)
SELECT Pos, LEFT(Str, CASE WHEN CHARINDEX(',', Str) > 0 THEN CHARINDEX(',', Str) - 1 ELSE LEN(Str) END) AS Word
FROM SplitWords;Pos Word --- ---- 1 Один 2 Два 3 Три