Substring() у SQL Server: Як використовувати з прикладом

⚡ Розумний підсумок

SUBSTRING() у SQL Server extracts повертає частину символу, тексту або двійкового виразу, повертаючи задану кількість символів з вибраної початкової позиції, та природно поєднується з CHARINDEX для розбору на основі роздільників.

  • ✂️ Мета: SUBSTRING() повертає певну частину рядка, враховуючи вихідний вираз, початкову позицію та довжину.
  • 🔢 Три аргументи: Вираз, початкова позиція та загальна довжина є обов'язковими у функції SQL Server SUBSTRING().
  • 📍 Однобазовий індекс: Початкова позиція базується на 1, тому перший символ вважається позицією один, що дозволяє уникнути помилок, пов'язаних з відхиленням на одиницю.
  • 🔎 З CHARINDEX: Поєднання SUBSTRING() з CHARINDEX() знаходить роздільник та extracтекст до або після нього.
  • ↔️ Проти ЛІВОРУЧ та ПРАВРУЧ: На відміну від LEFT() та RIGHT(), SUBSTRING()tracсимволи ts з будь-якої позиції, не лише з кінців.
  • ⚠️ Граничні випадки: Довжина 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() extracts символів з початкової позиції для заданої довжини

Приклади підрядків T-SQL

Припущення: Припустимо, що у нас є таблиця з назвою 'Guru99' з двома стовпцями та чотирма рядками, як показано нижче. Ми використовуватимемо це'GuruТаблиця 99' у наступних прикладах:

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() у реальному світі є 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.

Поширені запитання

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 робить предикат неможливим для саргажу, тому SQL Server не може використовувати пошук за індексом для цього стовпця. Для збігів префіксів шаблон LIKE 'value%' зазвичай працює краще.

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

Штучний інтелект та помічники машинного навчання перетворюють правила простою англійською мовою на комбінації SUBSTRING(), CHARINDEX(), LEFT() та RIGHT(), пропонують обчислення довжини та позначають помилки з відхиленням на одиницю. Розробник перевіряє кожну пропозицію на правильність перед її розгортанням.

Підсумуйте цей пост за допомогою: