天天看點

SQL Server 2012 新特性:新增和修改函數

轉換函數

     1.PARSE

     Parse是把字元串類型轉化為想要的類型,看看和convert和cast的差別

SELECT PARSE ('2.111111' AS float ),CAST ('2.111111111111' AS FLOAT) ---------------------- ---------------------- 2.111111               2.111111111111 (1 row (s ) affected ) SELECT PARSE ('19010101' AS DATETIME ),CAST ('19010101' AS DATETIME) Msg 9819, Level 16, State 1, Line 63 Error converting string value '19010101' into data type datetime using culture ''. SELECT PARSE ('1901-01-01' AS DATETIME ),CAST ('1901-01-01' AS DATETIME) ----------------------- ----------------------- 1901-01-01 00:00:00.000 1901-01-01 00:00:00.000 (1 row (s ) affected )      新功能轉日期的時候格式一定要注意,不然轉不過去,沒有cast好用。

     2.TRY_CONVERT

     TRY_CONVERT,如果轉化成功傳回值,轉化不成功傳回null,比 convert轉化不成功報錯,程式設計更加簡單和友善些。

     比如:

   SELECT   CASE WHEN TRY_CONVERT(float, 'test') IS NULL      THEN 'Cast failed'     ELSE 'Cast succeeded' END AS Result; GO

     3.TRY_PASSE

     和上面的類似,隻是不成功傳回null。

SELECT TRY_PARSE ('19010101' AS DATETIME ),CAST ('19010101' AS DATETIME) NULL                    1901 -01 -01 00 :00 :00.000     

日期和時間函數

     1.DATEFROMPARTS

     通過傳入年月日參數拼出一個日期,以前使用字元串拼接然後再轉化成日期

SELECT DATEFROMPARTS ( 2010, 12, 31 ),CAST ('20101231' AS date) ---------- ---------- 2010-12-31 2010-12-31

     2.DATETIME2FROMPARTS

     和上面類似,但是多了時分秒和精度。

SELECT DATETIME2FROMPARTS ( 2011, 8, 15, 14, 23, 44, 5, 1 ), DATETIME2FROMPARTS ( 2011, 8, 15, 14, 23, 44, 50, 2 ), DATETIME2FROMPARTS ( 2011, 8, 15, 14, 23, 44, 500, 3 ); --------------------------- --------------------------- --------------------------- 2011-08-15 14:23:44.5       2011 -08 -15 14 :23 :44.50      2011 -08 -15 14 :23 :44.500

     3.DATATIMEFROMPARTS     

     和上面基本沒有差別,隻是沒有了精度

SELECT DATETIMEFROMPARTS ( 2010, 12, 31, 23, 59, 59, 0 ) ; ----------------------- 2010-12-31 23:59:59.000

     4.DATATIMEOFFSETFROMPARTS

     相比上面多了時區設定。傳回datatimeoffset類型

     5.EOMONTH

     計算月的最後一天,有了這個就很友善,在編寫月報或者什麼的時候。

DECLARE @date DATETIME = GETDATE (); SELECT EOMONTH ( @date ) AS 'This Month', EOMONTH ( @date, 1 ) AS 'Next Month',EOMONTH ( @date , -1 ) AS 'Last Month'; This Month Next Month Last Month ---------- ---------- ---------- 2016-08-31 2016-09-30 2016-07-31

     6.SMALLDATATIMEFROMPARTS

     SMALLDATATIME類型在sql server中精度到分鐘位置。和上面的函數一樣的效果。

邏輯函數

     1.CHOOSE

     傳回清單中的索引值。如果不能傳入參數,或者不能解析逗号分隔字元串,所實話沒啥用有點雞肋

SELECT CHOOSE ( 3, 'Manager', 'Director' , 'Developer', 'Tester' ) --------- Developer

     2.IIF

     根據表達式傳回值,傳回某個值。應該是case when 的簡化版

SELECT IIF ( (SELECT COUNT( 1) FROM dbo. t1)>= 1, (SELECT COUNT (1 ) FROM dbo .t1 ), 0 ) ----------- 1

字元串函數

     1.CONCAT

     用處和mysql的concat一樣用來連接配接字元串。

SELECT CONCAT ( 'Happy ', 'Birthday ' , 11 , '/', '25' ) ------------------------------ Happy Birthday 11/25

     2.FORMAT

     用來傳回指定區域的的文本,比如時間。

DECLARE @d DATETIME = '10/01/2011' ; SELECT FORMAT ( @d , 'D', 'en-US' ) AS 'US English Result' US English Result --------------------------- Saturday, October 1 , 2011