Számos új függvény teszi egyszerűbbé a mindennapi TSQL programozást. A függvények egy része az Excel vagy az Access függvényeihez hasonló, megkönnyítve az ezeken írt alkalmazások átírását SQL Server 2012-re.
Számos új dátumkezelő függvényünk van. Az eomonth visszaadja egy adott dátumhoz tartozó hónap utolsó napját (kezelve szökőéveket, stb.). A második paraméterével át lehet térni egy másik hónapra is:
declare @currentdate datetime = '20120225'; select eomonth (@currentdate) as 'EOMMonth', eomonth (@currentdate, -2) as 'EOM2MonthsEarlier', eomonth (@currentdate, 1) as 'EOM1MonthLater';
Dátum összerakása a komponenseiből:
declare @Year int = 2011; declare @Month int = 2; declare @Day int = 29; select datefromparts(@Year, @Month, @Day) AS Result;
Hasonló függvények készültek a többi típushoz is: datetimefromparts, datetime2fromparts, datetimeoffsetfromparts, smalldatetimefromparts, timefromparts.
A típusok közötti konverzió sokkal egyszerűbbé vált. Egyrészt most már van try_convert, ami az eddigi convert függvénnyel ellentétben nem dob hibát, ha nem sikerül a konverzió, hanem nullt ad vissza:
select TRY_CONVERT(float, 'test') F , TRY_CONVERT(datetime2, '2012-05-15') D1 , TRY_CONVERT(datetime2, '2012-05-15.') D2 , TRY_CONVERT(datetime2, '2012-05-45') D3 , TRY_CONVERT(datetime2, '25/04/2020', 103) D4; --British/French: dd/mm/yyyy
A .NET-ből ismert alaptípusok Parse, TryParse és ToString metódusát is kivezették, így ezekkel gazdag, szabályozható formátumú és kultúrafüggő értelmezési és formázási lehetőségek jelentek meg az SQL Serverben.
SELECT PARSE('7/17/2011' AS DATE USING 'en-US') AS dt1,
PARSE('2011.07.17.' AS DATE USING 'hu-HU') AS dt2;
Az en-US angol nyelv, USA-ban értelmezve, a hu-HU magyar nyelv, Magyarországon értelmezve.
A format függvény segítségével a .NET-es típusok ToStringjét hívhatjuk meg, amivel rendkívül egyszerű összetett formázásokat is megvalósítani:
declare @Price decimal(19,4) = 13542.1251; declare @Date datetime2(0) = '20120425 15:13:00'; select --Pénzösszegek format(@Price, 'C4', 'hu-hu') HunPrice, --13 542,1251 Ft format(@Price, 'C4', 'en-us') UsPrice, --$13,542.1251 --Dátumok format(@Date, 'D', 'hu-hu') HunDate, --2012. április 25. format(@Date, 'D', 'en-us') UsDate, --Wednesday, April 25, 2012 format(@Date, 'd', 'hu-hu') HunDate2, format(@Date, 'd', 'en-us') UsDate2, format(@Date, 'f', 'hu-hu') HunDate3, format(@Date, 'f', 'en-us') UsDate3, --Custom format string format(@Date, 'yyyy.MM.dd') HuncutDate3, --Számok formázása format(@Price, 'F2', 'hu-hu') HunNumber, format(@Price, 'F2', 'en-us') UsNumber, format(@Price, '00000', 'en-us') LeadingZerosNumber, format(@Price, 'N2', 'hu-hu') HunGroupedNumber, format(@Price, 'N2', 'en-us') UsGroupedNumber;
Az eddig case-ekkel megvalósított logikai kifejezések egy részét egyszerűbben is meg tudjuk fogalmazni az iif és a choose függvényekkel:
select a = iif(1=1, 'cica', 'kutya'), --cica b = iif(1=2, 'cica', 'kutya'), --kutya n = iif(null = 1, 'cica', 'kutya'); --kutya
A choose az n. argumentumot adja vissza, 1-gyel kezdődő sorszámmal:
select choose(1, 'a', 'b', 'c') as 'first', choose(2, 'a', 'b', 'c') as 'second';
A concat függvénnyel szövegeket lehet egybefűzni. Abban különbözik a + operátortól, hogy mivel a paraméterei stringek, ha más típus megy be paraméterül, az automatikusan stringgé konvertálódik, így biztosan stringként kerül összefűzésre . A másik különbség, hogy a NULL paraméterek helyett üres stringet helyettesít be, míg a + operátor alap set opciók esetén NULL-t ad vissza.
declare @PurchaseOrderNumber int = 123;
select concat('PO', @PurchaseOrderNumber) PO1,
concat('PO', NULL, @PurchaseOrderNumber) PO2;
Bár az adatok formázása általában nem az adatbázis, hanem a megjelenítési réteg feladata, ennek ellenére sokszor kellett eddig is például számokat vagy dátumokat formázni SQL-ben is. Az új függvényekkel a .NET formázások teljes repertoárja elérhető az SQL programozók részére is.




