標籤:
在SQL Server 2012中,新增了幾個轉換函式,用於支援資料類型的強制轉化。
由於之前主要用的是SQL Server 2008R2,而公司的項目為了提高開發效率,很多表的列都為varchar類型,但也會儲存數字。
當對這些列進行彙總計算,比如sum時,要先進行cast轉換為numeric類型,經常會報錯,現在有了這些新的函數,可以先try一下,通過判斷返回值是否為null,我們可以判斷欄位值是否為數字,如果不是數字,就直接過濾到,所以這些函數非常實用,希望對大家有用。
1、PARSE函數
文法:PARSE ( string_value AS data_type [ USING culture ] )
參數:
string_value:nvarchar (4000) 值,表示要解析為指定資料類型的格式化值。
string_value:必須為所請求的資料類型的表示形式,否則 PARSE 將引發錯誤。
data_type :表示結果的所請求資料類型的文本值。
culture :可選字串,它標識對 string_value 進行格式化的地區性。
如果未提供 culture 參數,則使用當前會話的語言。 可以使用 SET LANGUAGE 語句隱式或顯式設定 此語言。 culture 接受 .NET Framework 支援的任何地區性;它不局限於 SQL Server 顯式支援的語 言。 如果culture 參數無效,PARSE 將引發錯誤。
例子:
--解析為 日期SELECT PARSE('2010年10月11日' AS datetime2 USING 'zh-CN') /*2010-10-11 00:00:00.0000000*/--解析為 美元SELECT PARSE('$345.98' AS money USING 'en-US') /*345.98*/--先設定要進行格式化的地區性,然後解析為 日期SET LANGUAGE '簡體中文';SELECT PARSE('2010年10月11日' AS datetime) /*2010-10-11 00:00:00.000*/
2、TRY_CAST函數
返迴轉換為指定資料類型的值(如果轉換成功);否則返回 Null。
可以用來判斷指定值是否能轉化為相應的資料類型,間接就可以知道值是什麼資料類型。
文法:TRY_CAST ( expression AS data_type [ ( length ) ] )
參數:
expression:要轉換的值。 任何有效運算式。
data_type :要將 expression 轉換到的資料類型。
length :指定目標資料類型長度的可選整數。可接受值的範圍由 data_type 的值確定。
例子:
--轉換失敗SELECT CASE WHEN TRY_CAST('.' AS numeric(10,2)) IS NULL THEN '轉換失敗' ELSE '轉換成功'END--轉換成功SELECT CASE WHEN TRY_CAST('1' AS numeric(10,2)) IS NULL THEN '轉換失敗' ELSE '轉換成功' END
3、TRY_CONVERT函數
返迴轉換為指定資料類型的值(如果轉換成功);否則返回 Null。
可以用來判斷指定值是否能轉化為相應的資料類型,間接就可以知道值是什麼資料類型。
文法:TRY_CONVERT ( data_type [ ( length ) ], expression [, style ] )
參數:
data_type [ ( length ) ]:要將 expression 轉換到的資料類型。
expression : 要轉換的值。
style :一個可選的整數運算式,指定 TRY_CONVERT 函數如何轉換 expression。style 接受與 CONVERT 函數的 style 參數相同的值。 可接受值的範圍由 data_type 的值確定。 如果 style為 null,則TRY_CONVERT 返回 null。
例子:
--函數直接報錯,是因為函數的寫法有問題SELECT CASE WHEN TRY_CONVERT(xml, 4) IS NULL THEN '轉換失敗' ELSE '轉換成功' END/*訊息 529,層級 16,狀態 2,第 2 行不允許從資料類型 int 到 xml 的顯式轉換。*/
--轉換失敗SELECT CASE WHEN TRY_CONVERT(float, 'a') IS NULL THEN '轉換失敗' ELSE '轉換成功' END--轉換成功SELECT CASE WHEN TRY_CONVERT(datetime, '20141201 13:12:11') IS NULL THEN '轉換失敗' ELSE CONVERT(datetime, '20141201 13:12:11') --轉換成功 ENDSELECT CASE WHEN TRY_CONVERT(numeric(10,2),'1') IS NULL THEN '轉換失敗' ELSE CONVERT(numeric(10,2),'1') END
4、TRY_PARSE函數
在 SQL Server 2012 中,返回運算式的結果(已轉換為請求的資料類型);如果強制轉換失敗,則返回 Null。
TRY_PARSE 僅用於從字串轉換為日期/時間和數字類型。
文法:TRY_PARSE ( string_value AS data_type [ USING culture ] )
參數:
string_value:nvarchar(4000) 值,表示要解析為指定資料類型的格式化值。
string_value:必須為所請求的資料類型的有效表示形式,否則 TRY_PARSE 將返回 Null。
data_type :表示結果的所請求資料類型的文本。
culture: 可選字串,它標識對 string_value 進行格式化的地區性。
如果未提供 culture 參數,則使用當前會話的語言。 可以使用 SET LANGUAGE 語句隱式或顯式設定此語言。 culture 接受 .NET Framework 支援的任何地區性;它不局限於 SQL Server 顯式支援的語言。 如果culture 參數無效,PARSE 將引發錯誤。
例子:
SELECT CASE WHEN PARSE('2010年10月11日' AS datetime2 USING 'zh-CN') IS NULL THEN '失敗' ELSE '成功' END '轉化結果',PARSE('2010年10月11日' AS datetime2 USING 'zh-CN') '轉化後的值'/*轉化結果轉化後的值成功2010-10-11 00:00:00.0000000*/
【Transact-SQL】SQL Server 2012新功能之一:轉換函式