SQL Server 2012新增的內建函式嘗試

2022-01-17 08:10:26 字數 2431 閱讀 4205

sql server2012新增了一些內建函式來讓開發人員使用起來更加容易。可以減少**量,下面我們將sql server新增的函式分為幾類分別**一下。

sql server2012中提供了兩個和字串相關的函式,分別為concat和format.

concat如其名稱所示,用於連線兩個字串.但比過去的增強是可以免去型別轉換的煩惱而直接將多個值連線為乙個string值進行返回,如圖1所示.

圖1.concat示例

concat的msdn鏈結為:

而format是將指定字串按照格式和地區進行格式化。如圖2所示。

圖2.format例項

這個具體的本地化特性可以參考national language support (nls) api reference

sql server2012新增了兩個邏輯類函式,分別為choose和iif。這兩個函式都可以看作是case…when的翻版函式。

先從choose來看,choose按照索引號返回列表中的資料,如圖3所示。

圖3.choose示例

choose在msdn中的鏈結為:

與choose等效的case表示式如圖4表示。

圖4.choose和case表示式

而iif函式就是類c語言中」xx===xx?結果1:結果2」這樣的按照布林運算結果返回對應內容的t-sql版本,應用起來非常簡單,如圖5所示。

圖5.iif表示式

iif在msdn的鏈結為:

sql server2012新增了一些時間和日期格式,都是一些小語法糖的感覺。下面分別為新增的函式和對應的msdn位址。由於這些函式比較雷同,所以簡單的挑乙個說:

datefromparts(

datetimefromparts(

datetime2fromparts (

datetimeoffsetfromparts(

timefromparts(

datefromparts函式是根據給定的年月日給出date型別的日期,如圖6所示。

圖6.datefromparts示例

下面這個函式eomonth要重點突出一下,這個函式的確是可以省點力。這個函式可以根據指定日期取得日期當月的最後一天,以前我們要做到這點都是通過dateadd和day函式去運算下,現在可以免去這個煩惱了,eomonth使用示例如圖7所示。

圖7.eomonth函式示例

eomonth在msdn的鏈結 :

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新增的內建函式,個人感覺上來看,基本上所有的函式都是語法糖性質的。不過用好了語法糖也會讓**更加整潔和具有可讀性。

SQL Server 2012新增和改動DMV

sql server 2012新增和改動dmv 說明 sys.dm exec query stats transact sql 新增了四列,以幫助排除長時間執行的查詢所存在的問題。可以使用 total rows min rows max rows 和 last rows 聚合行計數列,分隔那些從出現...

解除安裝sql server 2012

好不容易裝上了sql server2012資料庫,可是卻不能連線本地的資料庫,後來發現缺少一些服務,於是決定重新安裝,但是解除安裝卻很麻煩,如果解除安裝不乾淨的話,重新安裝會出問題,所以下面就總結一些方法 在解除安裝sql server 2012後,大家都希望能夠將登錄檔資訊完全刪乾淨,下面就將教您...

SQLServer 2012 高效分頁

sql code 功能 生成測試資料.create table test paging id int identity 1,1 not null primary key,testnumber int not null,testname varchar 20 not null,testdept var...