搜尋本站文章

2012-06-29

SQL Server 2012 :認識 TRY_PARSE 轉換函數


適用版本: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