Substring() у SQL Server: Як використовувати з прикладом
⚡ Розумний підсумок
SUBSTRING() у SQL Server extracts повертає частину символу, тексту або двійкового виразу, повертаючи задану кількість символів з вибраної початкової позиції, та природно поєднується з CHARINDEX для розбору на основі роздільників.
Що таке Substring()?
SUBSTRING() – це функція в SQL що дозволяє користувачеві виводити підрядок з будь-якого заданого рядка за потреби. SUBSTRING() наприкладtracts — це рядок заданої довжини, починаючи з заданого місця у вхідному рядку. Метою SUBSTRING() у SQL є повернення певної частини рядка.
Синтаксис для Substring()
SUBSTRING(Expression, Starting Position, Total Length)
тут:
- Вираз SUBSTRING() у SQL Server може бути будь-яким символом, двійковим числом, текстом або зображенням. Вираз – це вихідний рядок, з якого вибирається підрядок.
- Початкова позиція визначає позицію у виразі, з якої має починатися новий підрядок.
- Загальна довжина – це загальна очікувана довжина результуючого підрядка з виразу, починаючи з початкової позиції.
Правила використання SUBSTRING()
- Усі три аргументи є обов'язковими у функції MS SQL SUBSTRING().
- Якщо початкова позиція перевищує максимальну кількість символів у виразі, функція SUBSTRING() у SQL Server нічого не повертає.
- Загальна довжина може перевищувати максимальну довжину символів вихідного рядка. У цьому випадку результуючий підрядок – це весь рядок, починаючи з початкової позиції у виразі до останнього символу виразу.
На діаграмі нижче показано використання функції SUBSTRING() у SQL Server:
Приклади підрядків T-SQL
Припущення: Припустимо, що у нас є таблиця з назвою 'Guru99' з двома стовпцями та чотирма рядками, як показано нижче. Ми використовуватимемо це'GuruТаблиця 99' у наступних прикладах:
Запит 1: SUBSTRING() у SQL з довжиною, меншою за загальну максимальну довжину виразу.
SELECT Tutorial_name, SUBSTRING(Tutorial_name,1,2) As SUB from Guru99;
Результат: На діаграмі нижче підрядок стовпця «Tutorial_name» відображається як стовпець «SUB». Початкова позиція — 1, а довжина — 2, тому повертаються перші два символи:
Запит 2: SUBSTRING() у SQL Server з довжиною, більшою за загальну максимальну довжину виразу.
SELECT Tutorial_name, SUBSTRING(Tutorial_name,2,8) As SUB from Guru99;
Результат: На діаграмі нижче підрядок стовпця «Tutorial_name» відображається як стовпець «SUB». Навіть якщо довжина підрядка перевищує загальну максимальну довжину виразу, помилка не виникає, і запит повертає повний рядок, починаючи з початкової позиції:
SUBSTRING з CHARINDEX у SQL Server
Дуже поширеним використанням SUBSTRING() у реальному світі є extracтекст, що знаходиться перед або після роздільника, такого як домен в адресі електронної пошти. Сама по собі функція SUBSTRING() потребує фіксованої початкової позиції, але позиція роздільника змінюється від рядка до рядка. Функція CHARINDEX() вирішує цю проблему, повертаючи позицію символу всередині рядка:
CHARINDEX(substring_to_find, expression [, start_location])
Вкладаючи CHARINDEX() всередину SUBSTRING(), початкова позиція стає динамічною. У наведеному нижче прикладі знаходить @ символ і повертає все, що йде після нього. A змінна містить значення вибірки:
DECLARE @Email VARCHAR(50) = 'john.doe@guru99.com'; SELECT SUBSTRING(@Email, CHARINDEX('@', @Email) + 1, LEN(@Email)) AS Domain;
Тут CHARINDEX('@', @Email) знаходить позицію символу @, додаючи 1 для переміщення далі нього, а SUBSTRING() потім extracts решту символів. Для значення вище запит повертає домен guru99.comЦей шаблон CHARINDEX-plus-SUBSTRING є стандартним способом розбору структурованих рядків у T-SQL.
SUBSTRING проти LEFT та RIGHT у SQL Server
SQL Server також надає функції LEFT() та RIGHT() для вилучення символів з початку або кінця рядка. Вони коротші для запису, але обмежені двома кінцями. SUBSTRING() є найгнучкішою, оскільки може починатися з будь-якої позиції. У таблиці нижче їх порівнюють:
| функція | Аргументи | Extracтс від | Еквівалент SUBSTRING() |
| LEFT(вираз;n) | 2 | Початок рядка | ПІДСТРІНКА(вираз; 1; n) |
| ПРАВО(вираз; n) | 2 | Кінець рядка | SUBSTRING(вираз, LEN(вираз) – n + 1, n) |
| ПІДСТРІНКА(вираз; початок; довжина) | 3 | Будь-яка посада | Не підтримується |
Коротше кажучи, LEFT() та RIGHT() – це зручні скорочення для кінців рядка, тоді як SUBSTRING() обробляє загальний регістр, включаючи символи, взяті з середини.
Від'ємні, нульові та NULL аргументи в SUBSTRING
Окрім основних правил, корисно знати, як SUBSTRING() поводиться на краях. Коли початкова позиція дорівнює нулю або від'ємному значенню, SQL Server обчислює ефективну довжину (початок + довжина – 1) і починає читання з першої позиції. Коли будь-який аргумент має значення NULL, результат також дорівнює NULL. Таблиця нижче, перевірена на відповідність офіційним даним ПІДСТРІНКА (Transact-SQL) посилання, показує такі випадки:
| виклик | Результат | Причина |
| ПІДСТРІНКА('Guru99', 1, 4) | Guru | Звичайний виклик: чотири символи з першої позиції. |
| ПІДСТРІНКА('Guru99', 0, 3) | Gu | Почніть з одиниці: ефективна довжина дорівнює 0 + 3 – 1 = 2. |
| ПІДСТРІНКА('Guru99', 4, 100) | u99 | Довжина, що перевищує рядок, повертає залишок без помилки. |
| ПІДСТРІНКА('Guru99', 3, НУЛЬ) | NULL | Аргумент NULL робить весь результат NULL. |
Знання цих граничних випадків запобігає несподіванкам, коли початкова позиція обчислюється з іншого стовпця або змінна що може бути нулем або NULL.





