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.

  • ✂️. Cel: SUBSTRING() zwraca określoną część ciągu na podstawie wyrażenia źródłowego, pozycji początkowej i długości.
  • 🔢 Trzy argumenty: W funkcji SUBSTRING() serwera SQL Server obowiązkowe są wyrażenie, pozycja początkowa i całkowita długość.
  • 📍 Indeks oparty na jednym: Pozycja początkowa jest oparta na 1, więc pierwszy znak jest liczony jako pozycja pierwsza, co pozwala uniknąć błędów typu „pomyłka o jeden”.
  • 🔎 Z CHARINDEX: Połączenie SUBSTRING() z CHARINDEX() lokalizuje ogranicznik itracsprawdza tekst przed lub po nim.
  • ↔️ W porównaniu z LEWĄ i PRAWĄ: W przeciwieństwie do LEFT() i RIGHT(), SUBSTRING() np.tracpostacie z dowolnej pozycji, nie tylko z końców.
  • ⚠️ Przypadki skrajne: Długość NULL zwraca NULL, natomiast długość poza ciągiem znaków zwraca resztę bez zgłaszania błędu.

Funkcja SUBSTRING() w programie SQL Server z przykładami języka T-SQL

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:

Diagram pokazujący jak działa SUBSTRING()tracznaki ts z pozycji początkowej dla danej długości

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:

Guru99 przykładowych tabel z kolumnami Tutorial_ID i Tutorial_name używanymi w przykładach SUBSTRING

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:

Siatka wyników zwracająca pierwsze dwa znaki Tutorial_name jako kolumnę SUB

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:

Siatka wyników zwracająca resztę Tutorial_name, gdy żądana długość przekracza ciąg

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.

FAQ

Serwer SQL używa SUBSTRING(); SUBSTR() to nazwa używana w Oracle oraz MySQLObie zwracają część ciągu, ale SUBSTRING() jest standardową funkcją Transact-SQL, więc SUBSTR() nie zostanie uruchomiona na serwerze SQL Server.

Tak. Ponieważ SUBSTRING() zwraca wartość, może ona pojawić się w klauzulach WHERE, SELECT i ORDER BY. Filtrowanie po SUBSTRING() zazwyczaj uniemożliwia wyszukiwanie indeksu, więc wzorzec LIKE często jest szybszy w przypadku wyszukiwania prefiksów.

Tak, ale SQL Server najpierw konwertuje wartość na ciąg znaków, niejawnie lub za pomocą CAST lub CONVERT. Pozycja początkowa i długość liczą znaki, a nie cyfry ani części daty, dlatego należy starannie sformatować wartość.

Forma trójargumentowa zachowuje się podobnie, ale szczegóły są różne. MySQL pozwala również na SUBSTR() i ujemne pozycje początkowe, podczas gdy SQL Server używa SUBSTRING() i traktuje początek poniżej jedynki, stosując regułę efektywnej długości.

Funkcja SUBSTRING() zwraca tę samą kategorię, co dane wejściowe: varchar dla danych znakowych, nvarchar dla tekstu Unicode i varbinary dla wyrażeń binarnych. Długość zależy od żądanego podciągu, a nie od całej kolumny źródłowej.

Owińping Kolumna w SUBSTRING() wewnątrz klauzuli WHERE sprawia, że ​​predykat jest niemożliwy do sarkowania, więc SQL Server nie może użyć wyszukiwania indeksowego dla tej kolumny. W przypadku dopasowań prefiksowych wzorzec LIKE 'value%' zazwyczaj działa lepiej.

Tak. Drugi pilot GitHub Potrafi tworzyć wyrażenia SUBSTRING() i CHARINDEX(), w tym analizę opartą na ogranicznikach, z poziomu wiersza poleceń języka naturalnego. Zawsze sprawdzaj pozycję początkową, długość i indeksowanie od 1 przed uruchomieniem zapytania.

Asystenci sztucznej inteligencji i uczenia maszynowego tłumaczą reguły prostego języka angielskiego na kombinacje SUBSTRING(), CHARINDEX(), LEFT() i RIGHT(), sugerują obliczenia długości i sygnalizują błędy o jeden. Deweloper weryfikuje każdą sugestię pod kątem poprawności przed jej wdrożeniem.

Podsumuj ten post następująco: