
STRING_SPLIT to jedna z najbardziej przydatnych funkcji w SQL Server, szczególnie gdy mamy do czynienia z danymi zawierającymi wartości oddzielone przecinkami lub innymi separatorami. W tym artykule pokażę, jak działa funkcja STRING_SPLIT w języku SQL oraz jakie są jej ograniczenia i zastosowania.
Co to jest STRING_SPLIT?
STRING_SPLIT to wbudowana funkcja T-SQL dostępna od SQL Server 2016. Jest używana do dzielenia ciągu znaków na osobne elementy na podstawie zadanego separatora. Wyniki zwracane są w formie tabeli, co czyni tę funkcję niezwykle przydatną przy pracy z danymi w postaci CSV (comma-separated values).
Podstawowa składnia STRING_SPLIT
Podstawowa składnia funkcji jest bardzo prosta:
SELECT value
FROM STRING_SPLIT('Jabłko,Banan,Gruszka', ',');
Wynikiem będzie tabela zawierająca pojedynczą kolumnę value
, w której każdy element łańcucha jest osobnym wierszem:
value |
---|
Jabłko |
Banan |
Gruszka |
Zastosowanie STRING_SPLIT w zapytaniach
Funkcja STRING_SPLIT jest szczególnie przydatna w sytuacjach, gdy chcemy przekonwertować string na zbiór wartości i użyć ich np. w filtrach (WHERE
, JOIN
itp.).
Przykład użycia STRING_SPLIT w filtrze:
DECLARE @Lista NVARCHAR(100) = '101,102,103';
SELECT *
FROM Produkty
WHERE ID IN (SELECT value FROM STRING_SPLIT(@Lista, ','));
Ten kod pozwala traktować przekazaną listę numerów jako zbiór wartości i wyszukać produkty, których ID znajduje się na tej liście.
Ograniczenia funkcji STRING_SPLIT
Choć funkcja STRING_SPLIT jest naprawdę użyteczna, warto znać jej ograniczenia:
- Dostępna tylko od SQL Server 2016.
- Nie gwarantuje zachowania kolejności elementów — dane mogą być zwracane w dowolnej kolejności.
- Nie obsługuje wieloznakowych separatorów (np.
', '
zamiast tylko','
).
STRING_SPLIT z opcją ordinal (SQL Server 2017+)
Od SQL Server 2017 funkcja STRING_SPLIT może zwracać dodatkową kolumnę ordinal
, określającą oryginalną pozycję elementu. Możemy to uzyskać, włączając DATABASE SCOPED CONFIGURATION
:
ALTER DATABASE SCOPED CONFIGURATION SET COMPATIBILITY_LEVEL = 150;
SELECT value, ordinal
FROM STRING_SPLIT('SQL,Java,Python', ',', 1);
Wynik:
value | ordinal |
---|---|
SQL | 1 |
Java | 2 |
Python | 3 |
Dzięki temu możemy zachować porządek oryginalnych wartości, co jest istotne w niektórych scenariuszach.
Alternatywy dla STRING_SPLIT
Jeśli korzystasz ze starszej wersji SQL Server lub potrzebujesz bardziej zaawansowanej obsługi podziału tekstu, warto rozważyć alternatywne metody:
- Użytkowe funkcje definicji wierszy (
TVF
) używające pętliWHILE
. - Rozwiązania z XML, np.
STRING_AGG()
z odwróconą logiką. - Procedury CLR (wywołania kodu .NET), gdy wydajność jest kluczowa.
Podsumowanie
STRING_SPLIT to potężne i wygodne narzędzie do operacji na listach wartości zawartych w łańcuchach znaków. Pomaga w prosty sposób rozdzielić dane na pojedyncze elementy, czyniąc kod SQL bardziej czytelnym i wydajnym. Pomimo kilku ograniczeń, jest to must-have w SQL Server dla wszystkich programistów, którzy często pracują z wartościami CSV.
Inny ciekawy artykuł:
Jak działa INITCAP w języku SQL? Przykłady zastosowania
Opanuj SQL z moim kursem!
Poznasz zarówno podstawy, jak i zaawansowane zapytania analityczne (CTE, subqueries, window functions). Nauczysz się pracować na różnych silnikach – na kursie pracujemy zarówno na MySQL, jak i na Postgres. Wszystko zainstalujemy na Twoim komputerze, plus dostaniesz mnóstwo zestawów danych do ćwiczeń.
Zostań analitykiem danych – dołącz do KajoDataSpace!
Najlepsza ścieżka do zawodu analityka danych. Dostęp do pełnych wersji kursów online z Excela, SQLa, Tableau i Pythona z certyfikatami + specjalistycznych webinarów z PowerBI.
Ekskluzywana ale pomagająca sobie społeczność.
Ponad 61 godzin materiałów video.
Spotkania LIVE co miesiąc.
Mój osobisty mentoring.