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

Использование функции RIGHT для работы с текстом в MS 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 в сочетании с другими функциями для извлечения расширения файла из полного пути:

Пример sql
DECLARE @FilePath NVARCHAR(100) = 'C:\Folder\Document.pdf';
SELECT RIGHT(@FilePath, CHARINDEX('.', REVERSE(@FilePath)) - 1) AS FileExtension;
pdf

Извлечение последних N символов из каждого значения столбца таблицы:

Пример sql
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 цифр номера кредитной карты:

Пример sql
DECLARE @CardNumber VARCHAR(16) = '1234567812345678';
SELECT 'XXXX-XXXX-XXXX-' + RIGHT(@CardNumber, 4) AS MaskedCard;
XXXX-XXXX-XXXX-5678

Динамическое определение длины извлекаемой подстроки на основе данных:

Пример sql
DECLARE @Text VARCHAR(50) = 'Основной текст (комментарий)';
SELECT RIGHT(@Text, CHARINDEX('(', REVERSE(@Text)) - 2) AS ExtractedComment;
комментарий

Применение RIGHT в выражении CASE для условного извлечения символов:

Пример sql
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, преобразованного в строку:

Пример sql
SELECT RIGHT(CONVERT(VARCHAR, GETDATE(), 108), 5) AS CurrentTime;
14:30

MS SQL RIGHT function comments

En
RIGHT Returns the right part of a character string with the specified number of characters