В этом руководстве вы узнаете, как использовать функцию SQL Server SUBSTRING() для извлечения подстроки из строки.
Обзор функции SQL Server SUBSTRING()
Функция SUBSTRING() извлекает подстроку указанной длины, начиная с указанного места во входной строке.
Ниже показан синтаксис функции SUBSTRING():
SUBSTRING(input_string, start, length);
В этом синтаксисе:
- input_string может быть символьным, двоичным, текстовым, текстовым или графическим выражением.
- start — это целое число, которое указывает место, где начинается возвращаемая подстрока. Обратите внимание, что первый символ в input_string — 1, а не ноль.
- length — положительное целое число, которое указывает количество символов возвращаемой подстроки. Функция SUBSTRING() выдает ошибку, если длина отрицательная. Если start + length > длины input_string, подстрока начнется с начала и будет включать оставшиеся символы input_string.
Примеры SQL Server SUBSTRING()
Давайте рассмотрим несколько примеров использования функции SUBSTRING(), чтобы понять, как она работает.
A) Использование функции SUBSTRING() с литеральными строками
В этом примере извлекается подстрока длиной 6, начиная с пятого символа, в строке «SQL Server SUBSTRING».
SELECT SUBSTRING('SQL Server SUBSTRING', 5, 6) result;
Вот что получилось:
result ------ Server (1 row affected)
Б) Использование функции SUBSTRING() со столбцами таблицы
Для демонстрации мы будем использовать таблицу sales.customers из образца базы данных.
В этом примере функция SUBSTRING() используется для извлечения домена из адресов электронной почты клиентов:
SELECT email, SUBSTRING( email, CHARINDEX('@', email)+1, LEN(email)-CHARINDEX('@', email) ) domain FROM sales.customers ORDER BY email;
На следующем рисунке показан частичный вывод:
Как это работает.
Сначала мы использовали функцию CHARINDEX() для поиска символа '@' в письме. Домен будет начинаться с символа @ плюс один.
Затем мы использовали результат функции CHARINDEX() для определения:
- Начальное местоположение домена: CHARINDEX('@', email) + 1
- Длина домена: LEN(email)-CHARINDEX('@', email)
Чтобы подсчитать количество писем на домен, вы можете использовать следующий запрос:
SELECT SUBSTRING( email, CHARINDEX('@', email)+1, LEN(email)-CHARINDEX('@', email) ) domain, COUNT(email) domain_count FROM sales.customers GROUP BY SUBSTRING( email, CHARINDEX('@', email)+1, LEN(email)-CHARINDEX('@', email) );
Вот что получилось:
В этом руководстве вы узнали, как использовать функцию SQL Server SUBSTRING() для извлечения символов из строки.