Substring() w programie SQL Server: jak używać z przykładem
⚡ Inteligentne podsumowanie
SUBSTRING() w programie SQL Server extraczwraca część znaku, tekstu lub wyrażenia binarnego, ustawia liczbę znaków z wybranej pozycji początkowej i naturalnie współpracuje z CHARINDEX w celu analizy składniowej opartej na ogranicznikach.

Co to jest Podciąg()?
SUBSTRING() jest funkcją w SQL która pozwala użytkownikowi na wyprowadzenie podciągu z dowolnego podanego ciągu zgodnie z potrzebami. SUBSTRING() np.tracZwraca ciąg o określonej długości, rozpoczynający się w podanym miejscu w ciągu wejściowym. Celem funkcji SUBSTRING() w SQL jest zwrócenie określonej części ciągu.
Składnia podciągu()
SUBSTRING(Expression, Starting Position, Total Length)
Tutaj:
- Wyrażenie SUBSTRING() w SQL Server Może to być dowolny znak, ciąg binarny, tekst lub obraz. Wyrażenie to ciąg źródłowy, z którego pobierany jest podciąg.
- Pozycja początkowa określa pozycję w wyrażeniu, od której powinien zaczynać się nowy podciąg.
- Całkowita długość to całkowita oczekiwana długość podciągu wynikowego z Wyrażenia, zaczynając od Pozycji Początkowej.
Zasady korzystania z SUBSTRING()
- Wszystkie trzy argumenty są obowiązkowe w funkcji MS SQL SUBSTRING().
- Jeśli pozycja początkowa jest większa niż maksymalna liczba znaków w wyrażeniu, wówczas funkcja SUBSTRING() w programie SQL Server nie zwraca żadnej wartości.
- Całkowita długość może przekroczyć maksymalną liczbę znaków w oryginalnym ciągu. W takim przypadku powstały podciąg to cały ciąg, począwszy od pozycji początkowej w wyrażeniu, aż do ostatniego znaku wyrażenia.
Poniższy diagram ilustruje użycie funkcji SUBSTRING() w programie SQL Server:
Przykłady podciągów T-SQL
Założenie: Załóżmy, że mamy tabelę o nazwie „Guru99' z dwiema kolumnami i czterema wierszami, jak pokazano poniżej. Użyjemy tego 'GuruTabela 99' w poniższych przykładach:
Zapytanie 1: SUBSTRING() w SQL o długości mniejszej niż całkowita maksymalna długość wyrażenia.
SELECT Tutorial_name, SUBSTRING(Tutorial_name,1,2) As SUB from Guru99;
Wynik: Poniższy diagram przedstawia podciąg kolumny „Tutorial_name” jako kolumnę „SUB”. Pozycja początkowa to 1, a długość to 2, więc zwracane są dwa pierwsze znaki:
Zapytanie 2: SUBSTRING() w programie SQL Server o długości większej niż całkowita maksymalna długość wyrażenia.
SELECT Tutorial_name, SUBSTRING(Tutorial_name,2,8) As SUB from Guru99;
Wynik: Poniższy diagram przedstawia podciąg z kolumny „Tutorial_name” jako kolumnę „SUB”. Mimo że długość podciągu jest większa niż całkowita maksymalna długość wyrażenia, nie zgłasza błędu, a zapytanie zwraca pełny ciąg od pozycji początkowej:
SUBSTRING z CHARINDEX w programie SQL Server
Bardzo powszechnym zastosowaniem funkcji SUBSTRING() w świecie rzeczywistym jest np.tracTekst znajdujący się przed lub po separatorze, na przykład domena w adresie e-mail. Funkcja SUBSTRING() wymaga stałej pozycji początkowej, ale pozycja separatora różni się w zależności od wiersza. Funkcja CHARINDEX() rozwiązuje ten problem, zwracając pozycję znaku w ciągu:
CHARINDEX(substring_to_find, expression [, start_location])
Zagnieżdżając CHARINDEX() wewnątrz SUBSTRING(), pozycja początkowa staje się dynamiczna. Poniższy przykład znajduje @ symbol i zwraca wszystko, co znajduje się po nim. zmienna przechowuje wartość próbki:
DECLARE @Email VARCHAR(50) = 'john.doe@guru99.com'; SELECT SUBSTRING(@Email, CHARINDEX('@', @Email) + 1, LEN(@Email)) AS Domain;
Tutaj CHARINDEX('@', @Email) lokalizuje pozycję symbolu @, dodając 1 ruch do niego, a następnie SUBSTRING() extracts pozostałe znaki. Dla powyższej wartości zapytanie zwraca domenę guru99.comWzorzec CHARINDEX-plus-SUBSTRING jest standardowym sposobem analizowania ustrukturyzowanych ciągów znaków w języku T-SQL.
SUBSTRING vs LEFT i RIGHT w programie SQL Server
SQL Server udostępnia również funkcje LEFT() i RIGHT(), które umożliwiają pobieranie znaków z początku lub końca ciągu. Są one krótsze w zapisie, ale ograniczają się do dwóch końców. Funkcja SUBSTRING() jest najbardziej elastyczna, ponieważ może zaczynać się w dowolnym miejscu. Poniższa tabela porównuje je:
| Funkcjonować | Argumenty | Extracts z | Równoważny SUBSTRING() |
| LEFT(wyrażenie, n) | 2 | Początek ciągu | PODCIĄG(wyrażenie, 1, n) |
| PRAWY(wyrażenie, n) | 2 | Koniec sznurka | SUBSTRING(wyrażenie, LEN(wyrażenie) – n + 1, n) |
| SUBSTRING(wyrażenie, początek, długość) | 3 | Dowolna pozycja | Nie dotyczy |
Krótko mówiąc, LEFT() i RIGHT() to wygodne skróty dla końców ciągu, podczas gdy SUBSTRING() obsługuje ogólny przypadek, w tym znaki pobrane ze środka.
Argumenty ujemne, zerowe i NULL w SUBSTRINGU
Poza podstawowymi zasadami, warto wiedzieć, jak funkcja SUBSTRING() zachowuje się na krawędziach. Gdy pozycja początkowa jest zerowa lub ujemna, SQL Server oblicza długość efektywną (start + length – 1) i rozpoczyna odczyt od pozycji pierwszej. Gdy którykolwiek argument ma wartość NULL, wynik również wynosi NULL. Poniższa tabela, zweryfikowana z oficjalną wersją PODŁAŃCUCH (Transact-SQL) odniesienie pokazuje te przypadki:
| Numer Telefonu | Wynik | Powód |
| PODCIĄG('Guru99', 1, 4) | Guru | Wywołanie normalne: cztery znaki od pozycji pierwszej. |
| PODCIĄG('Guru99', 0, 3) | Gu | Zacznij od wartości poniżej jednego: efektywna długość wynosi 0 + 3 – 1 = 2. |
| PODCIĄG('Guru99', 4, 100) | u99 | Długość poza ciągiem znaków zwraca resztę bez błędu. |
| PODCIĄG('Guru99', 3, NULL) | NULL | Argument NULL sprawia, że cały wynik będzie również NULL. |
Znajomość tych przypadków brzegowych zapobiega niespodziankom, gdy pozycja początkowa jest obliczana na podstawie innej kolumny lub zmienna może to być zero lub NULL.




