SQL Server 2017 tuo mukanaan uusia merkkijonofunktioita, joilla pystyy tekemään tiedon käsittelyä helpommin kuin aiemmissa SQL Server versioissa. Tässä blogissa esittelen uudet funktiot TRIM, TRANSLATE, STRING_AGG ja CONCAT_WS.
TRIM
Trim -funktiolla poistetaan välilyöntejä merkkijonoista. Ennen SQL Server versiota 2017 oli käytettävissä LTRIM ja RTRIM funktioita.
SQL Server 2016:

SQL Server 2017:

TRANSLATE
Translate funktiolla korvataan annetusta syötteestä merkkejä. Samassa lauseessa voi antaa useita korvattavia sekä korvaavia merkkejä.
Urani aikana on tullut vastaan tilanne, jossa tuntimerkinnät menivät työajan seurannassa merkkijono (varchar) sarakkeeseen ja merkinnöistä tuli kirjaajansa näköisiä eli merkintätapoja oli lukuisia pisteellä, puolipisteellä, kaksoispisteellä eroteltuna sekä vielä h ja min teksteillä. Alla esimerkki tilanteesta hour sarakkeessa on kannassa oleva arvo ja muunnettu sarakkeessa merkkijono muutettuna desimaali muotoon. (esimerkissä ei ole mukana tunnin ja desimaaliluvun muunnoksia)
SQL Server 2016:

Tulos:

SQL Server 2017, tässä korvattu neljä merkkiä (.:; ja h kirjain pilkulla):

Tulos:

STRING_AGG
String_agg funktion avulla saadaan rivimuotoinen tieto yhdistettyä yhdeksi riviksi, esimerkiksi halutaan listat asiakkaat sukupuolen mukaan. Lähtödata alla:

SQL Server 2016 toteutus FOR XML lauseella:

Tulos:

SQL Server 2017 STRING_AGG funktio:

Tulos:

SQL Server 2017 STRING_AGG funktio, johon lisätty lajittelu WITHIN GROUP:

Tulos aakkosjärjestyksessä:

CONCAT_WS
CONCAT funktiolla yhdistetään merkkijonoja, CONCAT_WS (With Separator) antaa mahdollisuuden lisätä välimerkki muodostettavaan merkkijonoon, esimerkiksi yhdistetään etunimi ja sukunimi sarakkeet:
SQL Server 2016:

Tulos:

SQL Server 2017:

Tulos:

Tero Ramu
Microsoft Certified Trainer
T-Base Oy
Tero on työskennellyt niin pienten kuin suurienkin yritysten kanssa ja kouluttanut satoja ammattilaisia vuodesta 1999 alkaen.
Tämä blogi on julkaistu alunperin vuonna 2017 T-Basen verkkosivuilla.