本文將介紹 SQL Server 2012 的 T-SQL 新的型別轉換函數。
以往利用 T-SQL 做型別轉換通常是使用 CONVERT 和 CAST,SQL Server 2012 提供了新的轉換函數 PARSE 可用來把字串轉換成日期/時間和數字型態,若要做其他類型的型態的轉換,仍必須使用CONVERT 和 CAST。和 CONVERT 和 CAST 不同的是,PARSE 在轉換時可以指定文化特性,除了 SQL Server 支援的語言外,也可以是 .Net Framework 所支援的文化特性。
以下程式碼用來示範如何把字串轉換成日期/時間型態,以及轉換成貨幣型態。
1: SELECT PARSE('9 June 2012' AS datetime USING 'fr-FR')
2: SELECT PARSE('€123,456' AS money USING 'fr-FR')
【執行結果】
使用 PARSE 轉換型態時,若發生轉換失敗會出現 Error,若要避免這個問題發生像是下圖的狀況。
您可以改用 TRY_PARSE,當發生轉型失敗時不會發生 Error,只會回傳 NULL,您就可以依照回傳值是否為 NULL 來判斷是否轉換成功。
1: SELECT TRY_PARSE('€123,456' AS money USING 'zh-tw')
2: SELECT TRY_PARSE('9 June 2012' AS datetime USING 'zh-tw')
3: SELECT TRY_PARSE('€123,456' AS money USING 'zh-tw')
【執行結果】
另外,您也可以利用 TRY_CONVERT 來轉型,這個函數算是 CONVERT 的進階版,用來提供 CONVERT 函數原本的功能外,加上防止 Error 發生的機制,當轉型失敗一樣會回傳 NULL。
1: --TRY_CONVERT
2: DECLARE @i int
3: DECLARE @s varchar(10) = '12345678a'
4: --SET @i = CONVERT(int, @s)
5: IF (TRY_CONVERT(int,@s) IS NULL)
6: PRINT N'格式錯誤'
7: ELSE
8: SET @i = TRY_CONVERT(int,@s)
9:
10: PRINT @i
【執行結果】
【參考資料】