如果 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 语句使用 CONVERT 、第二个 SELECT 语句使用 CAST 来将 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

下面是这两者查询的结果集。

SQL转换函数(CAST 和 CONVERT)_报表

 


 

1.截取datetime类型的日期,不需要小时分钟等等:

select  convert( char ( 10 ), getdate(), 120 ) 

结果为:

2010-08-09

2.截取datetime类型的具体时间,不需要日期:

select  convert( char ( 8 ), getdate(), 108 ) 

结果为:

00:35:36