轉換函數
當 SQL Server 2005 不自動執行資料類型轉換時,可以使用 CAST 和 CONVERT 轉換函數,將一個資料類型的運算式轉換成另一個資料類型。例如,若要比較 char 和 datetime 運算式,或 smallint 和 int 運算式,或不同長度的 char 運算式,SQL Server 會自動轉換它們。這就是所謂的隱含轉換。不需要對這些隱含轉換使用 CAST 或 CONVERT。不過,您可以在下列轉換案例中使用 CAST 和 CONVERT:
- 兩個運算式的資料類型完全一樣。
- 兩個運算式均有隱含轉換的性質。
- 明確轉換資料類型是必要的。
如果您試圖進行不可能的轉換 (例如,將包含字母的 char 運算式轉換為 int),則 SQL Server 會顯示錯誤訊息。
CAST 和 CONVERT 函數也可以用來取得各種特殊資料格式,並可用於選取清單、WHERE 子句和允許使用運算式的任何地方。
如果您想要 Transact-SQL 程式碼符合 SQL-92,請使用 CAST 來代替 CONVERT。而使用 CONVERT 來代替 CAST,則可利用 CONVERT 的功能。
當您使用 CAST 或 CONVERT 時,需要下列資訊:
- 要轉換的運算式;例如,銷售報表需要有從貨幣資料轉換成字元資料的銷售資料。
- 指定的運算式要轉換成何種資料類型,例如,varchar 或其他 SQL Server 系統資料類型。
除非您儲存轉換的值,否則轉換只有在 CAST 或 CONVERT 函數的使用期間內有效。
如果在轉換資料類型時未指定長度,SQL Server 會自動將長度設為 30。
範例
下列範例在第一個 SELECT
陳述式中使用 CAST
,在第二個 SELECT
陳述式中使用 CONVERT
,將 Title
資料行轉換成 nvarchar(20)
資料行,使標題長度縮短。
USE AdventureWorks;
GO
SELECT CAST(Title AS nvarchar(20)) AS Title, Revision
FROM Production.Document
WHERE Revision < 2
GO
或
USE AdventureWorks;
GO
SELECT CONVERT(nvarchar(20), Title) AS Title, Revision
FROM Production.Document
WHERE Revision < 2
GO
以下為結果集 (適用於任一查詢)。
Title Revision
-------------------- --------
Crank Arm and Tire M 0
Front Reflector Brac 1
Installing Replaceme 0
Repair and Service G 0
Training Wheels 2 1
(5 row(s) affected)
在下例中,HireDate
資料行是 datetime 資料行,它轉換成 char(11)
資料行。
USE AdventureWorks
GO
SELECT c.FirstName, c.LastName, CAST(e.HireDate AS char(11)) AS HireDate
FROM HumanResources.Employee e
JOIN Person.Contact c ON e.EmployeeID = c.ContactID
WHERE c.FirstName = 'Kim'
GO
以下為結果集:
FirstName LastName HireDate
--------- ----------------------- -----------
Kim Abercrombie Dec 12 1997
Kim Akers Mar 23 1998
(2 row(s) affected)
請參閱
概念
其他資源
CAST 和 CONVERT (Transact-SQL)
函數 (Transact-SQL)