Funkcje STRING_SPLIT i STRING_AGG w SQL Server

Tekst do kolumn i wartości kolumny do tekstu w MsSQL

W jaki sposób w MsSQL zagregować rekordy w kolumnie do zwykłego tekstu lub też wykonać działanie odwrotne, a więc jak rozdzielić tekst rozdzielony np średnikiem, bądź spacją na poszczególne rekordy? Do tych celów w SQL Server służą funkcje STRING_SPLIT i STRING_AGG, które opisuję w tym artykule. Przykłady zawarte poniżej przeprowadzone zostały na danych w najprostszej formie. Z funkcji możesz korzystać w SQL Server 2016 i wersjach późniejszych.

Funkcja STRING_AGG w MsSQL – Przykład

Jeśli posiadasz dane zawarte w kolumnie i chciałbyś z nich utworzyć jeden ciąg tekstowy np rozdzielony średnikiem lub spacją, najlepiej skorzystać z funkcji MsSQL STRING_AGG. Funkcja STRING_AGG agreguje dane zawarte w kolumnie danego rekordu do jednego ciągu tekstowego np rozdzielonego średnikami lub spacją. Zróbmy krótki przykład użycia funkcji STRING_AGG. Do celów przykładu utwórz tabelę wg. poniższego skryptu i zainsertuj do niej 4 przykładowe rekordy.

--tomaszkenig.pl
CREATE TABLE TESTY (Name nvarchar(255));

INSERT INTO TESTY (NAME) VALUES ('Nico Rosberg');
INSERT INTO TESTY (NAME) VALUES ('Robert Kubica');
INSERT INTO TESTY (NAME) VALUES ('Filippe Massa');
INSERT INTO TESTY (NAME) VALUES ('Michael Schumacher');

Utworzona tabela powinna wyglądać jak na poniższym screenie. Poniżej przykład użycia funkcji STRING_AGG w SQL Server. Jest to najprostszy przykład, w którym mamy do czynienia z jedną kolumną, którą chcemy zagregować do ciągu tekstowego.

SQL Server - funkcja STRING_AGG. rekordy w kolumnie w ciąg tekstowy
SQL Server – funkcja STRING_AGG. rekordy w kolumnie w ciąg tekstowy

Ok, mamy już przykładową tabelę. W Jaki sposób teraz zagregować dane z rekordów, by utworzyły jeden ciąg tekstowy rozdzielany znakiem np średnikiem? Poniżej skrypt, za pomocą którego możemy to zrobić:

--tomaszkenig.pl
SELECT STRING_AGG (name, ';') as name_agg FROM TESTY;

Jak widzisz, w pierwszym argumencie funkcji STRING_AGG wprowadzamy nazwę kolumny, którą chcemy zagregować do tekstu. Wynik działania funkcji załączam na poniższym screenie:

SQL Server - funkcja STRING_AGG. Agregacja rekordów w ciąg String
SQL Server – funkcja STRING_AGG. Agregacja rekordów w ciąg String

Funkcja STRING_SPLIT w MsSQL – Przykład

Funkcja STRING_SPLIT w SQL Server służy do podziału ciągu tekstowego na rekordy. Ciąg tekstowy powinien być rozdzielony jakimś znakiem np średnikiem lub spacją. Funkcja STRING_SPLIT wykonuje działanie odwrotne do funkcji STRING_AGG. By zobrazować działanie funkcji stwórzmy na początek prosty przykład bez użycia tabeli. Ciąg tekstowy, który chcemy rozdzielić i pokazać w rekordach kolumny zawarty jest w skrypcie

--tomaszkenig.pl
SELECT value FROM STRING_SPLIT('Nico Rosberg;Robert Kubica;Filippe Massa;Michael Schumacher', ';');

Jak widzisz w pierwszym argumencie funkcji STRING_SPLIT odwołujemy się do tekstu, który chcemy rozdzielić. Drugi argument to znak rozdzielający występujący w tym tekście, a więc np średnik. Poniżej wynik działania

SQL Server - funkcja STRING_SPLIT.Ciąg tekstowy w rekordy w kolumnie
SQL Server – funkcja STRING_SPLIT.Ciąg tekstowy w rekordy w kolumnie

Funkcje równie dobrze możemy wykorzystać na rekordach tabeli. Możemy za jej pomocą np rozdzielić dowolny tekst za pomocą spacji, a następnie sprawdzić statystykę wyrazów występujących w tekście za pomocą np funkcji agregującej COUNT.

Jeśli chciałbyś poszerzyć swoją wiedzę na temat SQL Server, zachęcam do zapoznania się z kursem SQL Server, który zamieszczam pod tym adresem: Kurs SQL Server. Odsyłam także do innych skryptów SQL Server.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

2 komentarze “Funkcje STRING_SPLIT i STRING_AGG w SQL Server”