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:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Curabitur et mattis nisi, in euismod quam. 

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

SELECT VALUE FROM STRING_SPLIT('Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Curabitur et mattis nisi, in euismod quam. ',' ') 

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:

SELECT STRING_ESCAPE('
','json')

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:

SELECT STRING_ESCAPE('	"
/','json')

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.

 

Leave a Reply