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.
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:
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
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.
2 komentarze “Funkcje STRING_SPLIT i STRING_AGG w SQL Server”
Kilkakrotnie w tekście tego artykułu pojawiła się nazwa „SPLIT_STRING” zamiast „STRING_SPLIT”.
Poza tym kurs ciekawy, dziękuję i pozdrawiam!
Agnieszka
Rzeczywiście, dzięki za info