Substring() в SQL Server: Как да го използваме с пример

⚡ Умно обобщение

SUBSTRING() в SQL Server extracts връща част от символ, текст или двоичен израз, връщайки зададен брой символи от избрана начална позиция и се сдвоява естествено с CHARINDEX за разбор, базиран на разделители.

  • ✂️ Основание: SUBSTRING() връща специфична част от низ, като са дадени изходният израз, началната позиция и дължината.
  • 🔢 Три аргумента: Изразът, началната позиция и общата дължина са задължителни във функцията SUBSTRING() на SQL Server.
  • 📍 Индекс, базиран на едно число: Началната позиция е базирана на 1, така че първият символ се брои за позиция едно, което избягва грешки отклонение с едно.
  • ???? С CHARINDEX: Сдвояването на SUBSTRING() с CHARINDEX() локализира разделител и extracтекста преди или след него.
  • ↔️ Срещу ЛЯВО и ДЯСНО: За разлика от LEFT() и RIGHT(), SUBSTRING() еtracts герои от всяка позиция, не само от краищата.
  • ⚠️ Крайни случаи: Дължина NULL връща NULL, докато дължина след низа връща остатъка, без да генерира грешка.

Функция SUBSTRING() в SQL Server с примери за T-SQL

Какво е 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:

Диаграма, показваща как SUBSTRING() еtracts символи от начална позиция за дадена дължина

T-SQL примери за поднизове

Предположение: Да предположим, че имаме таблица с име „Guru99' с две колони и четири реда, както е показано по-долу. Ще използваме това 'Guru99' таблица в следните примери:

Guru99 примерна таблица с колони Tutorial_ID и Tutorial_name, използвани в примерите SUBSTRING

Запитване 1: SUBSTRING() в SQL с дължина, по-малка от общата максимална дължина на израза.

SELECT Tutorial_name, SUBSTRING(Tutorial_name,1,2) As SUB from Guru99;

Резултат: Диаграмата по-долу показва подниз от колоната „Tutorial_name“ като колона „SUB“. Началната позиция е 1, а дължината е 2, така че се връщат първите два символа:

Таблица с резултати, връщаща първите два знака от Tutorial_name като SUB колона

Запитване 2: SUBSTRING() в SQL Server с дължина, по-голяма от общата максимална дължина на израза.

SELECT Tutorial_name, SUBSTRING(Tutorial_name,2,8) As SUB from Guru99;

Резултат: Диаграмата по-долу показва подниз от колоната „Tutorial_name“ като колона „SUB“. Въпреки че дължината на подниз е по-голяма от общата максимална дължина на израза, не се генерира грешка и заявката връща пълния низ от началната позиция нататък:

Таблица с резултати, връщаща остатъка от Tutorial_name, когато заявената дължина надвишава низа

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.

Въпроси и Отговори

SQL Server използва SUBSTRING(); SUBSTR() е името, използвано в Oracle намлява MySQLИ двете връщат част от низ, но SUBSTRING() е стандартната функция на Transact-SQL, така че SUBSTR() няма да се изпълни на SQL Server.

Да. Тъй като SUBSTRING() връща стойност, тя може да се появи в клаузите WHERE, SELECT и ORDER BY. Филтрирането по SUBSTRING() обикновено предотвратява търсене по индекс, така че шаблонът LIKE често е по-бърз за търсене по префикс.

Да, но SQL Server първо преобразува стойността в низ, или имплицитно, или чрез CAST или CONVERT. Началната позиция и дължината след това броят знаци, а не цифри или части от дата, така че форматирайте стойността внимателно.

Триаргументната форма се държи подобно, но детайлите се различават. MySQL също така позволява SUBSTR() и отрицателни начални позиции, докато SQL Server използва SUBSTRING() и третира начало под едно, използвайки правило за ефективна дължина.

SUBSTRING() връща същата категория като входните си данни: varchar за символни данни, nvarchar за Unicode текст и varbinary за двоични изрази. Дължината зависи от заявения подниз, а не от цялата колона източник.

Увийтеping Колона в SUBSTRING() вътре в клауза WHERE прави предиката несъответстващ на sargable, така че SQL Server не може да използва индексно търсене за тази колона. За съвпадения на префикси, шаблонът LIKE 'value%' обикновено се представя по-добре.

Да. Копилот на GitHub може да генерира изрази SUBSTRING() и CHARINDEX(), включително парсинг, базиран на разделители, от подкана на естествен език. Винаги проверявайте началната позиция, дължината и индексирането, базирано на 1, преди да изпълните заявката.

Асистентите с изкуствен интелект и машинно обучение превеждат правилата на разбираем английски език в комбинации от SUBSTRING(), CHARINDEX(), LEFT() и RIGHT(), предлагат изчисления на дължина и маркират грешки с едно отклонение. Разработчикът преглежда всяко предложение за коректност, преди да го внедри.

Обобщете тази публикация с: