STRING_SPLIT

STRING_SPLIT FUNCTION

Funkcja STRING_SPLIT dodana do MS SQL w wersji 2016 zwraca jednokolumnową  tabelę. Nazwa kolumny to value a ilość rekordów wynika  string na wiersze wykorzystując zdefiniowane separatory, np. spację.

Ustawienia bazy

Funkcja STRING_SPLIT jest dostępna tylko jeśli ustawisz bazę na Compatibility level 130 lub wyższy. W celu sprawdzenia jakie masz ustawienie kliknij prawym przyciskiem mysz na bazę w Management Studio i wybierz Properties.

W nowym oknie wybierz Options i sprawdź wartość Compatibilty level.

Jeśli ta wartość jest niższa niż 130 napisz kod, który zmieni te ustawienia.

ALTER DATABASE DatabaseName SET COMPATIBILITY_LEVEL = 130

Jeśli używasz MS SQL Server 2017 to wartością właściwą będzie 140.

Teraz możesz używać funkcji STRING_SPLIT.

Tworzenie tabeli z przykładowymi danymi

Na potrzeby przetestowania nowej funkcji stwórz tabele i wypełnij ją danymi. Istotnym elementem będzie jedna kolumna z danymi, które chcemy podzielić na wiersze. W tym przykładzie będą to wartości oddzielane przecinkiem . Pamiętaj, że STRING_SPLIT działa na danych typu nvarchar, varchar oraz char. Zatem napisz kod tworzący tabelę:

CREATE TABLE split(col1 varchar(10), col2 int, col3 varchar(5));

Kolumna col3 będzie przechowywała dane, które chcesz podzielić.

Wypełnij tabelę danymi. Napisz skrypt:

INSERT INTO split(col1, col2, col3)
VALUES(‚linia 1’, 2, ‚1,2’), (‚linia 2’, 3, ‚1’), (‚linia 3’, 4, ‚2,3,4’);

Sprawdź teraz zawartość tabeli split.

SELECT * FROM split;

Otrzymałeś:

Wykorzystanie funkcji

Funkcję  wykorzystuje się we FROM. Chcesz podzielić zawartość col3 a zatem pierwszym argumentem funkcji będzie col3 a drugim przecinek, którym rozdzielone są wartości w col3.

Napisz skrypt:

SELECT col1, col2, col3, value
FROM split cross apply string_split(col3, ‚,’);

I sprawdź wynik.

Jak widzisz, dla każdej wartości po przecinku z kolumny col3, powstał nowy rekord.

Oczywiście kolumna value zachowuje się jak każda inna i dlatego może ją wykorzystać w dowolnym miejscu. Jako przykład sprawdź wykorzystanie tej kolumny w WHERE. Napisz kod:

SELECT col1, col2, col3, value
FROM split cross apply string_split(col3, ‚,’)
WHERE value = ‚2’;

I sprawdź wynik:

Jak widać działa poprawnie.

Tags:  ,

Odpowiedz

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>