搜尋本站文章

2012-06-27

SQL Server 2012 :認識 PARSE 轉換函數


適用版本:SQL Server 2012。

PARSE 轉換函數
傳回轉譯成所要求之資料類型的運算式結果。

PARSE 適用於從字串轉換到日期/時間、數值、貨幣等類型。
也可以使用貨幣符號進行剖析。

一般類型轉換仍可繼續使用 CAST 或 CONVERT。
 請注意,剖析字串值將對效能造成一定程度的負擔。

語法:

PARSE ( string_value AS data_type [ USING culture ] )


如未提供 culture 引數,將會使用目前工作階段的語言。
此語言是以 SET LANGUAGE 陳述式隱含或明確加以設定。

culture 可以是 .NET Framework 所支援的任何文化特性,不限於 SQL Server 明確支援的語言。
如果 culture 引數無效,PARSE 將會產生錯誤。




請參考以下的範例程式碼:

EX1:PARSE() 轉換函數,轉換為 datetime2 資料類型


 -- 繁體中文,日期的順序是:ymd
 SELECT PARSE('01/02/03' AS  datetime2 USING 'zh-TW') N'日期'
GO

 -- 英文 us_english,日期的順序是:mdy
SELECT PARSE('01/02/03' AS  datetime2 USING 'en-US') N'日期'
GO


-- 01_PARSE() 轉換函數,轉換為 datetime2 資料類型





EX2:PARSE() 轉換函數,使用貨幣符號進行剖析

-- 去除貨幣符號
-- 台幣
SELECT PARSE('NT$123,45' AS money USING 'zh-TW') N'金額(台幣)'
GO

-- 歐元
SELECT PARSE('€123,45' AS money USING 'de-DE') N'金額(歐元)'
GO

-- 美金
SELECT PARSE('$123,45' AS money USING 'en-US') N'金額(美金)'
GO


-- 02_PARSE() 轉換函數,使用貨幣符號進行剖析





EX3:刻意輸入不符合的資料,遭遇到錯誤

-- 輸入台幣,但卻是用 en-US 來剖析
SELECT PARSE('NT$123,45' AS money USING 'en-US') N'金額(美金)'
GO
/*
錯誤訊息:
訊息 9819,層級 16,狀態 1,行 1
使用 'en-US' 文化特性將字串值 'NT$123,45' 轉換成資料類型 money 時發生錯誤。
*/


-- 03_錯誤訊息 9819



-- 不存在的 culture 值
SELECT PARSE('NT$123,45' AS money USING 'en-DE') N'金額(美金)'
GO
/*
錯誤訊息:
訊息 9818,層級 16,狀態 1,行 1
函數呼叫中所提供的文化特性參數 'en-DE' 不受支援。
*/


-- 04_錯誤訊息 9818





認識 PARSE 轉換函數

傳回轉譯成所要求之資料類型的運算式結果。

語法:

PARSE ( string_value AS data_type [ USING culture ] )


引數說明:
(1) string_value
nvarchar(4000) 值,代表要剖析為指定之資料類型的格式化值。

string_value 必須是所要求之資料類型的有效表示法,否則 PARSE 會引發錯誤。

(2) data_type
表示結果之資料類型的常值。

(3) culture
指出 string_value 據以格式化之文化特性的選用字串。

如未提供 culture 引數,將會使用目前工作階段的語言。
此語言是以 SET LANGUAGE 陳述式隱含或明確加以設定。

culture 可以是 .NET Framework 所支援的任何文化特性,不限於 SQL Server 明確支援的語言。
如果 culture 引數無效,PARSE 將會產生錯誤。

注意事項

以引數形式傳遞給 PARSE 的 Null 值,會以下列兩種方式處理:

(1) 如果傳遞了 NULL 常數就會引發錯誤。 Null 值無法以特定文化特定方式剖析為不同的資料類型。

(2) 如果在執行階段傳遞了 null 值的參數,將會傳回 null,以避免整個批次遭到取消。

PARSE 僅適用於從字串轉換到日期/時間及數字類型。
一般類型轉換仍可繼續使用 CAST 或 CONVERT。 請注意,剖析字串值將對效能造成一定程度的負擔。

PARSE 必須仰賴既存的 .NET Framework Common Language Runtime (CLR)。

因為必須要有 CLR 才可執行此函數,所以無法從遠端進行。 從遠端處理需要 CLR 的函數,會導致遠端伺服器發生錯誤。

data_type 參數的詳細資訊

data_type 的參數值僅適用於下表所示的類型與樣式。 此處所提供的樣式資訊可以協助您決定所要允許的模式類型。

-- 05_支援的資料類型



如需有關樣式的詳細資訊,請參閱 .NET Framework 文件集中的 System.Globalization.NumberStyles 和 DateTimeStyles 列舉。



參考資料

PARSE (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/hh213316.aspx

轉換函數 (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/hh231076

T-SQL:認識日期時間的分隔符號;搭配使用 SET DATEFORMAT、SET LANGUAGE
http://sharedderrick.blogspot.tw/2012/06/t-sql-set-dateformatset-language.html