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' с две колони и четири реда, както е показано по-долу. Ще използваме това 'Guru99' таблица в следните примери:
Запитване 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() в реалния свят е да се изведеtracтекст, който се намира преди или след разделител, като например домейнът в имейл адрес. Сама по себе си, 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 | Начало на низа | SUBSTRING(израз; 1; n) |
| RIGHT(израз; n) | 2 | Край на низа | SUBSTRING(израз, LEN(израз) – n + 1, n) |
| SUBSTRING(израз, начало, дължина) | 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.





