转换函数
如果 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 中的功能,请使用 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)