SQL Server 2016 – nowe funkcje tekstowe STRING_SPLIT i STRING_ESCAPE

Dziś krótki artykuł z serii co nowego w SQL Server 2016 (wszystkie posty jakie udało się napisać w ramach tej serii znajdziecie tutaj). Pod lupę weźmiemy dwie nowe funkcje tj. STRING_SPLIT oraz STRING_ESCAPE.

STRING_SPLIT jest funkcją o dosyć ciekawej konstrukcji, która zwraca części pojedynczej wartości tekstowej jako odrębne wiersze. Aby lepiej zrozumieć jej działanie lepiej będzie przedstawić to na przykładzie. Tak więc mamy poniższy ciąg znaków:

Naszym celem jest to aby ciąg ten został podzielony w taki sposób, aby każde słowo było traktowane jako osobny wiersz. Z pomocą nam przychodzi wspomniana wcześniej STRING_SPLIT, która za pierwszy parametr przyjmuje właśnie ciąg znaków za drugi natomiast separator

Jak widać funkcje traktujemy jako tabelaryczną natomiast wartość poszczególnych rekordów są dostępne w jedynej kolumnie zwracanej przez tą funkcję o nazwie value. Efekt działania powyższego zapytania przedstawia się następująco:

Wcześniej osiągnięcie takiego efektu naprawdę wymagało dużo większego nakładu pracy i kombinowania – na szczęście od wersji 2016 SQL Server nie musimy się tym już martwić. Drugą funkcją jaką chciałem dziś przedstawić jest STRING_ESCAPE, która pozwala wyświetlić znaki specjalne (np. białe znaki) we wprowadzonym tekście. Drugi parametr określa zestaw reguł jaki ma być zastosowany do rozkodowania znaków – póki co może on przyjąć jedynie wartość json. Napiszmy proste zapytanie i przyjrzyjmy się rezultatowi:

Zwrócona została następująca wartość:

gdzie \r oznacza powrót karetki (ang. Carriage return) czyli powrót do pierwszego znaku w linii oraz \n oznacza nową linię. Oczywiście to nie wszystko np. taki zapis:

zwraca następującą wartość:

gdzie \t oznacza użycie tabulatora \” oznacza użycie cudzysłowie a np. \/ oznacza użycie popularnego slasha. Dzięki takiemu zapisowi możemy łatwo wyśledzić poszczególne znaki specjalne i np. zinterpretować je w naszej aplikacji.

Jest jeszcze trzecia funkcja o nazwie STRING_AGG, której działanie jest odwrotne do STRING_SPLIT tzn. zamienia wartości kilku wierszy w jeden ciąg znaków oddzielonych separatorem (np. przecinkiem). Jest ona bardzo pożądana przez deweloperów już od bardzo dawna jednakże nie mogę jej przedstawić gdyż… nie jest ona zaimplementowana w SQL Server 2016! Używać jej możemy  dopiero w SQL Server vNext czyli implementacji naszej ulubionej bazy danych na Linux, która jest tak naprawdę najnowszą jej wersją. Pozostaje mieć nadzieję, że pojawi się ona kiedyś w standardowej edycji na Windows. Mam nadzieję, że przedstawione funkcje pomogą Wam rozwiązać konkretne problemy biznesowe waszej bazy, przy okazji zachęcam do zapoznania się z pozostałymi wpisami w serii Poznaj SQL Server 2016.

 

Adrian Chodkowski
Follow me

Adrian Chodkowski

SQL geek, Data enthusiast, Consultant & Developer
Adrian Chodkowski
Follow me

Latest posts by Adrian Chodkowski (see all)

Leave a Comment

Your email address will not be published. Required fields are marked *