Share via


轉換函數

當 SQL Server 不自動執行資料類型轉換時,可以使用 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 AdventureWorks2008R2;
GO
SELECT CAST(Title AS nvarchar(20)) AS Title, Revision
FROM Production.Document
WHERE Revision < 2 ;
GO

或是

USE AdventureWorks2008R2;
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 個資料列受到影響)

在下列範例中,HireDate 資料行 (也就是 datetime 資料行) 會轉換成 char(11) 資料行。

USE AdventureWorks2008R2 ;
GO
SELECT p.FirstName, p.LastName, CAST(e.HireDate AS char(11)) AS HireDate 
FROM HumanResources.Employee AS e 
JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID
WHERE p.FirstName = 'Kim' ;
GO

以下為結果集:

FirstName       LastName                  HireDate

---------       -----------------------   -----------

Kim             Abercrombie               2004-02-17

Kim             Akers                     2003-01-27

(2 個資料列受到影響)