[鐵人賽][Denali 新特性探險4]Conversion functions
以前的版本沒有提供相關驗證轉換的函數,所以當轉換失敗時就會直接拋出錯誤訊息(如下圖)。
但這樣的處理方法相當不好,如果開發人員能事先知道轉換結果的話,
那開發過程中的Error Handling 可說變得較簡單且更好處理,
(就像.NET Framework也有提供相關類型轉換驗證的方法,
可參考[C#][Tips]比較Int32.TryParse、Int32.Parse And Convert.ToInt32),
當然使用Denali一定可以享受到VIP待遇,所以這種瑣碎又煩人的事情就交給Try_Parse function 吧。
TRY_PARSE:轉換字串為自訂類型,如果失敗將回傳null。
select try_parse('100元¡M' as int) as 'tryparseInt',
try_parse('200*10*10' as date) as 'tryparseDate',
try_parse('987.654' as decimal(10,2)) as 'tryparseDecimal',
try_parse('2011-10-10' as datetime(7) using 'en-us') as 'tryparseDatetime(7)'
基本應用
select
iif(try_parse('100' as money using 'zh-Tw') is not null,'新台幣100元','轉換失敗') as 'Result'
PARSE :轉換字串為自訂類型,如果失敗不回傳null。
select parse('17' as tinyint) as 'Result1',
parse('2011-10-10' as date) as 'Result2',
parse('$99.99' as money using 'en-us') as 'Result3'
TRY_CONVERT: 轉換資料為自訂類型,如果失敗將回傳null。
select try_convert(tinyint,'124.10') as 'tinyint',
try_convert(decimal(17,9),'12453.4511111111111111') as 'decimal(17,9)',
try_convert(varchar(10),'2011/10/10',111) as 'datetime',
try_convert(date,'20111111') as 'date'