[SQL SERVER][Denali] TSQL 新特性(下)
Denali 在開發方面的改善和新特性還算不少,可惜我沒太多時間好好深入研究,
所以撰寫 Denali 新特性一系列文章大部分都處於夢周公神遊狀態(半夢半醒...XD),
如果相關文章內容有錯還請告知,接下來我繼續補充其他我個人感興趣的TSQL新特性。
EOMONTH (Transact-SQL):取得月份最後一天
以往你要取得某個月份最後一天,大概都會利用 dateadd 和 day 兩個function 去湊出正確結果,
現在,Eomonth function 免去你拼拼湊湊的煩惱。
declare @mydate datetime
set @mydate = '2011-10-11'
--using eomonth function
select eomonth (@mydate)
--using dateadd and day function
select dateadd(mm,1,@mydate - day(@mydate)+1)-1
CONCAT (Transact-SQL):返回兩個或多個連接字串結果。
以往我們都使用 + 來連接字串,但遇到非字串類型一定得自行轉換為字串類型才可,
現在,Concat function 免去你不同資料類型連接問題。
concat function 不須自行處理資料類型轉換也行得通喔。
遇到int 資料類型,使用 + 串接會出現轉換失敗。
FORMAT (Transact-SQL):返回所指定的格式和文化特性。
我終於看到Format function了,現在你可以輕鬆指定相關資料類型格式了。
文化特性可查看National Language Support (NLS) API Reference
擷取部分。
declare @mydate datetime=getdate()
select concat(format(@mydate,'yyyy/MM/dd','zh-TW'),' -- ',format(@mydate,'d','zh-TW'))
select concat(format(@mydate,'yyyy/MM/dd','co'),' -- ',format(@mydate,'d','co' ))
select concat(format(@mydate,'yyyy/MM/dd','ga'),' -- ',format(@mydate,'d','ga' ))
select concat(format(@mydate,'yyyy/MM/dd','en-us'),' -- ',format(@mydate,'d','en-us' ))
CHOOSE (Transact-SQL):依索引(1~N)返回清單中所對應項目內容。
這裡我順便和 Case 來比較測試一下效能是否有很大差異。
Choose
select CustomerID,AccountNumber=choose(TerritoryID,'rico','papa','dou','dada','sasa')
from Sales.Customer
Case
select CustomerID,AccountNumber=
case
when TerritoryID=1 then 'rico'
when TerritoryID=2 then 'papa'
when TerritoryID=3 then 'dou'
when TerritoryID=4 then 'dada'
when TerritoryID=5 then 'sasa'
end
from Sales.Customer
效能結果比較表
Function | CPU 時間(ms) | 經過時間(ms) | 執行計畫總成本 |
Choose | 15 | 156 | 0.522512 |
Case | 0 | 137 | 0.522512 |
可以看到使用 Choose CPU時間較耗時(使用較多CPU資源),
經過時間Choose也較耗時,但兩個Function執行計畫總成本一樣,
看來兩者整體上的效能應該差距不大。
IIF (Transact-SQL):依布林運算式結果返回對應內容。
和Case比較測試一下效能是否有很大差異。
iif
select CustomerID,
AccountNumber=iif(TerritoryID=4,'My name is rico',AccountNumber)
from Sales.Customer
看來 iif 骨子裡也是 case when。
Case
select CustomerID,AccountNumber=
case
when TerritoryID=4 then 'My name is rico'
else AccountNumber
end
from Sales.Customer
效能結果比較表
Function | CPU 時間(ms) | 經過時間(ms) | 執行計畫總成本 |
IIF | 78 | 141 | 0.0542332 |
Case | 109 | 166 | 0.0542335 |
可以看到使用 IIF CPU時間較不耗時,
經過時間IIF也較不耗時,但兩個Function執行計畫總成本一樣,
看來兩者整體上的效能應該差距不大。
注意:
@對於相關新增的function目前版本都會顯示為不可辨識的內建函數名稱,
等到RTM時這紅色小蚯蚓應該會消失。