簡介
SQL Server2012新增了一些內置函數來讓開發人員使用起來更加容易。可以減少代碼量,下面我們將SQL Server新增的函數分為幾類分別探討一下。
字符串類函數
SQL Server2012中提供了兩個和字符串相關的函數,分別為Concat和Format.
Concat如其名稱所示,用於連接兩個字符串.但比過去的增強是可以免去類型轉換的煩惱而直接將多個值連接為一個String值進行返回,如圖1所示.
圖1.Concat示例
Concat的MSDN鏈接為:http://msdn.microsoft.com/en-us/library/hh231515(v=SQL.110).aspx
而Format是將指定字符串按照格式和地區進行格式化。如圖2所示。
圖2.Format實例
這個具體的本地化特性可以參考National Language Support (NLS) API Reference
Format的MSDN鏈接:http://msdn.microsoft.com/en-us/library/hh213505(v=sql.110).aspx
邏輯類函數
SQL Server2012新增了兩個邏輯類函數,分別為CHOOSE和IIF。這兩個函數都可以看作是CASE…WHEN的翻版函數。
先從CHOOSE來看,CHOOSE按照索引號返回列表中的數據,如圖3所示。
圖3.Choose示例
CHOOSE在MSDN中的鏈接為:http://msdn.microsoft.com/en-us/library/hh213019(v=sql.110).aspx
與Choose等效的CASE表達式如圖4表示。
圖4.CHOOSE和CASE表達式
而IIF函數就是類C語言中”XX===XX?結果1:結果2”這樣的按照布爾運算結果返回對應內容的T-SQL版本,應用起來非常簡單,如圖5所示。
圖5.IIF表達式
IIF在MSDN的鏈接為:http://msdn.microsoft.com/en-us/library/hh213574(v=SQL.110).aspx
日期類函數
SQL Server2012新增了一些時間和日期格式,都是一些小語法糖的感覺。下面分別為新增的函數和對應的MSDN地址。由於這些函數比較雷同,所以簡單的挑一個說:
DATEFROMPARTS(http://msdn.microsoft.com/en-us/library/hh213228(v=SQL.110).aspx)
DATETIMEFROMPARTS(http://msdn.microsoft.com/en-us/library/hh213233(v=SQL.110).aspx)
DATETIME2FROMPARTS (http://msdn.microsoft.com/en-us/library/hh213312(v=SQL.110).aspx)
DATETIMEOFFSETFROMPARTS(http://msdn.microsoft.com/en-us/library/hh231077(v=SQL.110).aspx)
TIMEFROMPARTS(http://msdn.microsoft.com/en-us/library/hh213398(v=SQL.110).aspx)
DATEFROMPARTS函數是根據給定的年月日給出Date類型的日期,如圖6所示。
圖6.DATEFROMPARTS示例
下面這個函數EOMONTH要重點突出一下,這個函數的確是可以省點力。這個函數可以根據指定日期取得日期當月的最后一天,以前我們要做到這點都是通過dateadd和day函數去運算下,現在可以免去這個煩惱了,EOMONTH使用示例如圖7所示。
圖7.EOMONTH函數示例
EOMONTH在MSDN的鏈接 :http://msdn.microsoft.com/en-us/library/hh213020(v=SQL.110).aspx
轉換類函數
SQL Server2012新增了3個轉換類函數PARSE和TRY_PARSE以及TRY_CONVERT
Parse和Cast的用法非常相似,唯一的不同是Parse可以多指定一個本地化參數,使得按照本地化語言可以被轉換,圖8比較了使用Parse和Cast的不同。
圖8.Parse和Cast
而TRY_CONVERT非常類似於Convert,但TRY_CONVERT可以探測被轉換類型是否可能,比如字符串有可能轉為INT類型,但INT類型無論取值是多少時,永遠不可能轉換為XML類型。當TRY_CONVERT轉換的數據類型有可能成功時,如果成功,返回轉換類型,如果失敗返回NULL,但如果所轉換的數據類型永遠不可能成功時,報錯,如圖9所示。
圖9.TRY_CONVERT示例
而TRY_PARSE非常類似於PARSE,僅僅是轉換不成功時不拋出異常,而是返回NULL,如圖10所示.
總結
本文簡單講述了SQL SERVER2012新增的內置函數,個人感覺上來看,基本上所有的函數都是語法糖性質的。不過用好了語法糖也會讓代碼更加整潔和具有可讀性。
本文的示例代碼: 點擊下載