搜尋本站文章

2012-06-28

SQL Server 2012 :認識 TRY_CONVERT 轉換函數


適用版本:SQL Server 2012。


TRY_CONVERT() 轉換函數

如果轉換成功,會傳回轉換為指定之資料類型的值;否則會傳回 Null。


CAST 和 CONVERT 都是轉換函數。
CAST 是 ANSI-SQL 標準函數,但 CONVERT 是 SQL Server 所提供。




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

EX1:認識 TRY_CONVERT() 與 CONVERT() 轉換函數


-- 使用 CONVERT() 轉換函數
SELECT 'ANSI:' N'標準', CONVERT(varchar(30), GETDATE(),102) N'樣式'
 UNION ALL
SELECT 'Japanese:' N'標準', CONVERT(varchar(30),GETDATE(),111) N'樣式'
 UNION ALL
SELECT 'European:' N'標準', CONVERT(varchar(30),GETDATE(),113) N'樣式'
GO

-- 使用 TRY_CONVERT() 轉換函數
SELECT 'ANSI:' N'標準', TRY_CONVERT(varchar(30), GETDATE(),102) N'樣式'
 UNION ALL
SELECT 'Japanese:' N'標準', TRY_CONVERT(varchar(30),GETDATE(),111) N'樣式'
 UNION ALL
SELECT 'European:' N'標準', TRY_CONVERT(varchar(30),GETDATE(),113) N'樣式'
GO


-- 01_認識 TRY_CONVERT() 與 CONVERT() 轉換函數



-- 使用 CONVERT() 函數,轉換不存在日期:2012年02月31日
SELECT CONVERT(datetime2, '20120231')
GO
/*
錯誤訊息:
訊息 241,層級 16,狀態 1,行 5
從字元字串轉換成日期及/或時間時,轉換失敗。
*/


-- 02_使用 CONVERT() 函數,轉換不存在日期:2012年02月31日



-- 使用 TRY_CONVERT() 函數,轉換不存在日期:2012年02月31日
SELECT TRY_CONVERT(datetime2, '20120231')
GO
/*
回傳:NULL
*/


-- 03_使用 TRY_CONVERT() 函數,轉換不存在日期:2012年02月31日






EX2:TRY_CONVERT() 轉換函數:判斷輸入的字串,是否可以轉換為數值

-- 輸入字串:A123,判斷輸入的字串,是否可以轉換為數值
DECLARE @cs1 varchar(100) ='A123', @cnt INT
SET @cnt=TRY_CONVERT(int, @cs1)

IF @cnt IS NOT NULL
 SELECT @cnt N'轉換結果'
ELSE
 SELECT N'轉換失敗' N'轉換結果'
GO


-- 04_輸入字串:A123,判斷輸入的字串,是否可以轉換為數值



-- 輸入字串:123,判斷輸入的字串,是否可以轉換為數值
DECLARE @cs1 varchar(100) ='123', @cnt INT
SET @cnt=TRY_CONVERT(int, @cs1)

IF @cnt IS NOT NULL
 SELECT @cnt N'轉換結果'
ELSE
 SELECT N'轉換失敗' N'轉換結果'
GO


-- 05_輸入字串:123,判斷輸入的字串,是否可以轉換為數值



-- TRY_CONVERT() 轉換函數,搭配使用 CASE 運算式
-- 輸入字串:A123
DECLARE @cs1 varchar(100) ='A123', @cnt INT
SET @cnt=TRY_CONVERT(int, @cs1)

SELECT 
 CASE WHEN @cnt IS NOT NULL
  THEN @cnt
  ELSE 0 
 END N'轉換結果'
GO


-- 06_TRY_CONVERT() 轉換函數,搭配使用 CASE 運算式






EX3:TRY_CONVERT() 轉換函數,搭配查詢資料表

-- TRY_CONVERT() 轉換函數:轉換為整數
USE Northwind
GO
SELECT  CustomerID, City, PostalCode,
 TRY_CONVERT(int, PostalCode) N'PostalCode_TRY_CONVERT_整數'
FROM Customers
GO


-- 07_TRY_CONVERT() 轉換函數:轉換為整數



-- TRY_CONVERT() 轉換函數:轉換為整數,搭配 ISNULL() 函數
SELECT  CustomerID, City, PostalCode,
 TRY_CONVERT(int, PostalCode) N'PostalCode_TRY_CONVERT_整數',
 ISNULL(TRY_CONVERT(int, PostalCode), 0) N'PostalCode_TRY_CONVERT_ISNULL_整數'
FROM Customers
GO


-- 08_TRY_CONVERT() 轉換函數:轉換為整數,搭配 ISNULL() 函數






認識 TRY_CONVERT 轉換函數

TRY_CONVERT() 轉換函數
如果轉換成功,會傳回轉換為指定之資料類型的值;否則會傳回 Null。

語法:

TRY_CONVERT ( data_type [ ( length ) ], expression [, style ] )


引數說明:
(1) data_type [ ( length ) ]
expression 轉換成的資料類型。

(2) expression
要進行轉換的值。

(3) style
這是指定 TRY_CONVERT 函數如何轉譯 expression 的選用性整數運算式。

style 接受與 CONVERT 函數的 style 參數相同的值。 如需詳細資訊,請參閱<CAST 和 CONVERT (Transact-SQL)>。

可接受值的範圍由 data_type 值決定。 如果 style 是 Null,則 TRY_CONVERT 會傳回 Null。

注意事項:

TRY_CONVERT 會取得傳送的值,並會嘗試將其轉換為指定的 data_type。
如果轉換成功,TRY_CONVERT 會以指定的 data_type 傳回值;如果發生錯誤則會傳回 Null。

但是,若您要求明確不允許的轉換,則 TRY_CONVERT 會失敗並出現錯誤。

TRY_CONVERT 是一個新的關鍵字,相容性層級為 110。

函數能以遠端方式在具有 SQL Server 2012 及更高版本的伺服器上運作。
它在版本低於 SQL Server 2012 的伺服器上無法以遠端方式運作。




參考資料

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