转换函数
如果 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 中的功能,请使用 CONVERT 而不要使用 CAST。
使用 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 row(s) affected)
在下面的示例中,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 row(s) affected)