转换函数

如果 SQL Server 2005 没有自动执行数据类型的转换,可以使用 CAST 和 CONVERT 转换函数将一种数据类型的表达式转换为另一种数据类型的表达式。例如,如果比较 chardatetime 表达式、smallintint 表达式或不同长度的 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 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)
Functions (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助