適用版本:SQL Server 2012。
TRY_PARSE() 轉換函數
將會傳回運算式的結果,並轉譯為所要求的資料類型;若轉換失敗,則傳回 Null。
語法:
TRY_PARSE ( string_value AS data_type [ USING culture ] )
建議先閱讀以下的文章:
T-SQL:認識 PARSE 轉換函數
http://sharedderrick.blogspot.tw/2012/06/t-sql-parse.html
請參考以下的範例程式碼:
EX1:認識 PARSE() 與 TRY_PARSE() 轉換函數
-- PARSE() 轉換函數: -- 繁體中文,日期的順序是:ymd -- 英文 us_english,日期的順序是:mdy SELECT PARSE('01/02/03' AS datetime2 USING 'zh-TW') N'日期(zh-TW)' GO SELECT PARSE('01/02/03' AS datetime2 USING 'en-US') N'日期(en-US)' GO -- TRY_PARSE() 轉換函數: -- 繁體中文,日期的順序是:ymd -- 英文 us_english,日期的順序是:mdy SELECT TRY_PARSE('01/02/03' AS datetime2 USING 'zh-TW') N'日期(zh-TW)' GO SELECT TRY_PARSE('01/02/03' AS datetime2 USING 'en-US') N'日期(en-US)' GO
-- 01_認識 PARSE() 與 TRY_PARSE() 轉換函數
EX2:刻意輸入不符合的資料,遭遇到錯誤
-- PARSE() 轉換函數:輸入台幣,但卻是用 en-US 來剖析 SELECT PARSE('NT$123,45' AS money USING 'en-US') N'金額(美金)' GO /* 錯誤訊息: 訊息 9819,層級 16,狀態 1,行 1 使用 'en-US' 文化特性將字串值 'NT$123,45' 轉換成資料類型 money 時發生錯誤。 */ -- PARSE() 轉換函數:不存在的 culture 值 SELECT PARSE('NT$123,45' AS money USING 'en-DE') N'金額(美金)' GO /* 錯誤訊息: 訊息 9818,層級 16,狀態 1,行 1 函數呼叫中所提供的文化特性參數 'en-DE' 不受支援。 */
-- 02_PARSE() 轉換函數:輸入台幣,但卻是用 en-US 來剖析
-- 03_PARSE() 轉換函數:不存在的 culture 值
-- TRY_PARSE() 轉換函數:輸入台幣,但卻是用 en-US 來剖析 SELECT TRY_PARSE('NT$123,45' AS money USING 'en-US') N'金額(美金)' GO /* 回傳:NULL */
-- 04_TRY_PARSE() 轉換函數:輸入台幣,但卻是用 en-US 來剖析
-- TRY_PARSE() 轉換函數:不存在的 culture 值 SELECT TRY_PARSE('NT$123,45' AS money USING 'en-DE') N'金額(美金)' GO /* 錯誤訊息: 訊息 9818,層級 16,狀態 1,行 1 函數呼叫中所提供的文化特性參數 'en-DE' 不受支援。 */
-- 05_TRY_PARSE() 轉換函數:不存在的 culture 值
EX3:TRY_PARSE() 轉換函數:判斷輸入的字串,是否可以轉換為資料類型
-- TRY_PARSE() 轉換函數:去除貨幣符號,轉為台幣 SELECT TRY_PARSE('NT$123,45' AS money USING 'zh-TW') N'金額(台幣)' GO -- TRY_PARSE() 轉換函數:輸入字串:NT$123,45,判斷輸入的字串,是否可以轉換為指定的台幣貨幣 DECLARE @cs1 varchar(100)='NT$123,45', @cmoney money SET @cmoney=TRY_PARSE(@cs1 AS money USING 'zh-TW') IF @cmoney IS NOT NULL SELECT @cmoney N'轉換結果_金額(台幣)' ELSE SELECT N'轉換失敗' N'轉換結果' GO
-- 06_TRY_PARSE() 轉換函數:輸入字串:NT$123,45,判斷輸入的字串,是否可以轉換為指定的台幣貨幣
-- TRY_PARSE() 轉換函數:輸入字串:NT$123,45,嘗試轉換為歐元貨幣 SELECT TRY_PARSE('NT$123,45' AS money USING 'de-DE') N'金額(歐元)' GO /* 回傳:NULL */ -- TRY_PARSE() 轉換函數:輸入字串:NT$123,45,判斷是否可以轉換為歐元貨幣 DECLARE @cs1 varchar(100)='NT$123,45', @cmoney money SET @cmoney=TRY_PARSE(@cs1 AS money USING 'de-DE') IF @cmoney IS NOT NULL SELECT @cmoney N'轉換結果金額(歐元)' ELSE SELECT N'轉換失敗' N'轉換結果' GO
-- 07_TRY_PARSE() 轉換函數:輸入字串:NT$123,45,判斷是否可以轉換為歐元貨幣
-- TRY_PARSE() 轉換函數,搭配使用 CASE 運算式 -- 輸入字串:NT$123,45,判斷是否可以轉換為歐元貨幣 DECLARE @cs1 varchar(100)='NT$123,45', @cmoney money SET @cmoney=TRY_PARSE(@cs1 AS money USING 'de-DE') SELECT CASE WHEN @cmoney IS NOT NULL THEN @cmoney ELSE 0 END N'轉換結果' GO
-- 08_TRY_PARSE() 轉換函數,搭配使用 CASE 運算式
參考資料
T-SQL:認識 PARSE 轉換函數
http://sharedderrick.blogspot.tw/2012/06/t-sql-parse.html
TRY_PARSE (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/hh213126
TRY_CONVERT (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/hh230993
轉換函數 (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/hh231076
CASE (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/ms181765.aspx