RIGHT: примеры (SQL)
RIGHT(character_expression, integer_expression): varcharОписание функции RIGHT в MS SQL Server
Функция RIGHT в MS SQL Server возвращает указанное количество символов с правого конца строки. Эта функция используется для извлечения конечной части строкового значения, когда количество необходимых символов известно или может быть вычислено.
Синтаксис функции: RIGHT (character_expression, integer_expression)
Параметры функции:
- character_expression — выражение символьного или двоичного типа данных. Это может быть константа, переменная или столбец. Для типов данных, отличных от символьных, происходит неявное преобразование в VARCHAR, если это возможно.
- integer_expression — целочисленное выражение, указывающее количество возвращаемых символов. Если значение отрицательное, возвращается ошибка. Если значение превышает длину строки, функция возвращает всю строку. Если значение равно нулю, возвращается пустая строка.
Возвращаемое значение: строка того же типа, что и входной параметр character_expression, за исключением случаев, когда передается строковый литерал в формате Unicode (например, N'строка'), тогда возвращается NVARCHAR.
Базовые примеры использования функции RIGHT
Пример извлечения последних трех символов из строки:
SELECT RIGHT('SQL Server', 3);ver
Пример с числовым значением, которое преобразуется в строку:
SELECT RIGHT(123456, 2);56
Пример с отрицательным значением второго аргумента, приводящий к ошибке:
SELECT RIGHT('Пример', -1);Сообщение об ошибке: "Аргумент length функции right недопустим."
Пример, когда запрашиваемое количество символов больше длины строки:
SELECT RIGHT('SQL', 10);SQL
Пример с нулевым значением второго аргумента:
SELECT RIGHT('Пример текста', 0);(пустая строка)
Альтернативные функции для работы со строками в MS SQL
В MS SQL Server существует несколько функций для манипуляции строками, которые могут использоваться в схожих сценариях или в комбинации с RIGHT.
- LEFT(character_expression, integer_expression) — извлекает указанное количество символов с начала строки. Прямой аналог RIGHT для начала строки.
- SUBSTRING(expression, start, length) — извлекает подстроку из строки, начиная с заданной позиции указанной длины. Более гибкая функция, позволяющая извлекать символы из любой части строки.
- STUFF(character_expression, start, length, replaceWith_expression) — удаляет указанное количество символов и вставляет другую строку в заданную позицию. Может использоваться для модификации частей строки.
Функция RIGHT предпочтительнее, когда требуется извлечь именно конечную часть строки, а не произвольную подстроку, так как ее синтаксис более прост и нагляден для данной задачи.
Аналоги функции RIGHT в других СУБД и языках программирования
В других системах управления базами данных существуют аналогичные функции для извлечения правой части строки.
MySQL: функция RIGHT имеет идентичный синтаксис RIGHT(str, len).
SELECT RIGHT('MySQL', 3);SQL
Oracle: используется функция SUBSTR с отрицательным смещением от конца строки или комбинация функций.
SELECT SUBSTR('Oracle', -3) FROM dual;cle
PostgreSQL: функция RIGHT(string, n) работает аналогично MS SQL. Также можно использовать SUBSTRING(string FROM pattern).
SELECT RIGHT('PostgreSQL', 4);SQL
SQLite: встроенной функции RIGHT нет, но можно использовать SUBSTR(string, -length).
SELECT SUBSTR('SQLite', -3);ite
Python: для строк доступна операция среза с отрицательным индексом str[-n:].
text = 'Python'
result = text[-3:]
print(result)hon
Распространенные ошибки при работе с функцией RIGHT
Наиболее типичные ошибки связаны с неверным пониманием типов данных или неожиданным поведением функции.
Ошибка передачи отрицательного числа в качестве второго аргумента:
SELECT RIGHT('Test', -2);Сообщение об ошибке: "Аргумент length функции right недопустим."
Неявное преобразование данных может привести к неочевидным результатам, особенно при работе с числами и датами:
SELECT RIGHT(123.45, 2);45
Работа с данными типа NULL. Если первый аргумент NULL, функция возвращает NULL:
SELECT RIGHT(NULL, 3);NULL
Второй аргумент NULL также приводит к возврату NULL:
SELECT RIGHT('Text', NULL);NULL
При использовании в сочетании с другими функциями важно учитывать, что RIGHT возвращает строку, даже если исходные данные были числовыми.
Изменения в функции RIGHT в последних версиях MS SQL Server
Функция RIGHT не претерпела значительных изменений в поведении или синтаксисе в последних версиях MS SQL Server. Основные принципы работы остаются неизменными начиная с ранних версий.
В SQL Server 2012 и более поздних версиях улучшена интеграция с другими строковыми функциями и оптимизирована производительность при работе с большими объемами данных, но базовый функционал сохранился.
При использовании в среде Azure SQL Database или Azure Synapse Analytics функция ведет себя идентично локальным версиям SQL Server.
Расширенные примеры применения функции RIGHT
Использование RIGHT в сочетании с другими функциями для извлечения расширения файла из полного пути:
DECLARE @FilePath NVARCHAR(100) = 'C:\Folder\Document.pdf';
SELECT RIGHT(@FilePath, CHARINDEX('.', REVERSE(@FilePath)) - 1) AS FileExtension;Извлечение последних N символов из каждого значения столбца таблицы:
SELECT TOP 3 Name, RIGHT(Name, 2) AS LastTwoChars
FROM Production.Product
ORDER BY Name;Name LastTwoChars Adjustable Race ce All-Purpose Bike Stand nd AWC Logo Cap ap
Использование RIGHT для форматирования вывода, например, отображения только последних 4 цифр номера кредитной карты:
DECLARE @CardNumber VARCHAR(16) = '1234567812345678';
SELECT 'XXXX-XXXX-XXXX-' + RIGHT(@CardNumber, 4) AS MaskedCard;XXXX-XXXX-XXXX-5678
Динамическое определение длины извлекаемой подстроки на основе данных:
DECLARE @Text VARCHAR(50) = 'Основной текст (комментарий)';
SELECT RIGHT(@Text, CHARINDEX('(', REVERSE(@Text)) - 2) AS ExtractedComment;комментарий
Применение RIGHT в выражении CASE для условного извлечения символов:
SELECT ProductNumber,
CASE
WHEN RIGHT(ProductNumber, 2) = 'BE' THEN 'Black Edition'
WHEN RIGHT(ProductNumber, 2) = 'SE' THEN 'Special Edition'
ELSE 'Standard'
END AS EditionType
FROM Production.Product
WHERE ProductNumber LIKE 'BK-%';Пример результата: ProductNumber EditionType BK-R18B-40 Standard BK-R93R-62 Special Edition
Использование RIGHT для извлечения компонентов времени из значения DATETIME, преобразованного в строку:
SELECT RIGHT(CONVERT(VARCHAR, GETDATE(), 108), 5) AS CurrentTime;14:30