【Transact-SQL】SQL Server 2012新功能之一:轉換函式

來源:互聯網
上載者:User

標籤:


在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新功能之一:轉換函式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.