SQL Server 2012 的 T-SQL 新功能 - 型別轉換函數

本文將介紹 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')

 

 

【執行結果】

image

 

使用 PARSE 轉換型態時,若發生轉換失敗會出現 Error,若要避免這個問題發生像是下圖的狀況。

 

image

 

您可以改用 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')

 

 

【執行結果】

image

 

另外,您也可以利用 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

 

 

【執行結果】

image

 

【參考資料】