適用版本: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
+%E8%88%87+TRY_PARSE()+%E8%BD%89%E6%8F%9B%E5%87%BD%E6%95%B8.png)
+%E8%BD%89%E6%8F%9B%E5%87%BD%E6%95%B8%EF%BC%9A%E8%BC%B8%E5%85%A5%E5%8F%B0%E5%B9%A3%EF%BC%8C%E4%BD%86%E5%8D%BB%E6%98%AF%E7%94%A8+en-US+%E4%BE%86%E5%89%96%E6%9E%90.png)
+%E8%BD%89%E6%8F%9B%E5%87%BD%E6%95%B8%EF%BC%9A%E4%B8%8D%E5%AD%98%E5%9C%A8%E7%9A%84+culture+%E5%80%BC.png)
+%E8%BD%89%E6%8F%9B%E5%87%BD%E6%95%B8%EF%BC%9A%E8%BC%B8%E5%85%A5%E5%8F%B0%E5%B9%A3%EF%BC%8C%E4%BD%86%E5%8D%BB%E6%98%AF%E7%94%A8+en-US+%E4%BE%86%E5%89%96%E6%9E%90.png)
+%E8%BD%89%E6%8F%9B%E5%87%BD%E6%95%B8%EF%BC%9A%E4%B8%8D%E5%AD%98%E5%9C%A8%E7%9A%84+culture+%E5%80%BC.png)
+%E8%BD%89%E6%8F%9B%E5%87%BD%E6%95%B8%EF%BC%9A%E8%BC%B8%E5%85%A5%E5%AD%97%E4%B8%B2%EF%BC%9ANT$123,45%EF%BC%8C%E5%88%A4%E6%96%B7%E8%BC%B8%E5%85%A5%E7%9A%84%E5%AD%97%E4%B8%B2%EF%BC%8C%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E8%BD%89%E6%8F%9B%E7%82%BA%E6%8C%87%E5%AE%9A%E7%9A%84%E5%8F%B0%E5%B9%A3%E8%B2%A8%E5%B9%A3.png)
+%E8%BD%89%E6%8F%9B%E5%87%BD%E6%95%B8%EF%BC%9A%E8%BC%B8%E5%85%A5%E5%AD%97%E4%B8%B2%EF%BC%9ANT$123,45%EF%BC%8C%E5%88%A4%E6%96%B7%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E8%BD%89%E6%8F%9B%E7%82%BA%E6%AD%90%E5%85%83%E8%B2%A8%E5%B9%A3.png)
+%E8%BD%89%E6%8F%9B%E5%87%BD%E6%95%B8%EF%BC%8C%E6%90%AD%E9%85%8D%E4%BD%BF%E7%94%A8+CASE+%E9%81%8B%E7%AE%97%E5%BC%8F.png)
 
 
沒有留言:
張貼留言