CAST 和 CONVERT转换函数(MSDN参考)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SQL Server 2005 联机丛书

CAST 和 CONVERT (Transact-SQL)

请参阅: : : : : : :

将一种数据类型的表达式显式转换为另一种数据类型的表达式。CAST 和 CONVERT 提供相似的功能。

Transact-SQL 语法约定

语法

Syntax for CAST:

CAST ( expression AS data_type [ (length ) ])

Syntax for CONVERT:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

备注

隐式转换指那些没有指定 CAST 或 CONVERT 函数的转换。显式转换指那些需要指定CAST 或 CONVERT 函数的转换。以下图例显示了可对 SQL Server 2005 系统提供的数据类型执行的所有显式和隐式数据类型转换。其中包括 xml、bigint 和

sql_variant。不存在对 sql_variant 数据类型的赋值进行的隐式转换,但是存在转换为 sql_variant 的隐式转换。

注意:

因为 Unicode 数据始终使用偶数个字节,所以在 binary 或 varbinary 与支持Unicode 的数据类型之间进行转换时会使用警告。例如,以下转换不返回十六进制值41;而是返回 4100:SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary)

大值数据类型

大值数据类型表现出与小值数据类型相同的隐式和显式转换行为,特别是 varchar、nvarchar 和 varbinary 数据类型。但是,应该考虑以下原则:

从 image 到 varbinary(max) 的转换与反向转换是隐式转换,text 与

varchar(max)、ntext、nvarchar(max) 之间的转换也是隐式转换。

∙从大值数据类型(如 varchar(max))到小值数据类型(如 varchar)的转换是隐式转换,但如果大值相对于指定长度的小值数据类型显得太大,则产生截断。

∙从 varchar、nvarchar 或 varbinary 到其相应的大值数据类型的转换都是隐式执行的。

∙从 sql_variant 数据类型到大值数据类型的转换是显式转换。

∙大值数据类型不能转换为 sql_variant 数据类型。

有关转换 Microsoft .NET Framework 公共语言运行时 (CLR) 用户定义类型的信息,

请参阅对用户定义类型执行操作。有关从 xml 数据类型进行转换的详细信息,请参阅生

成 XML 实例。

xml 数据类型

当您将 xml 数据类型显式或隐式转换为字符串或二进制数据类型时,xml 数据类型的内容将根据一组规则进行序列化。有关这些规则的信息,请参阅 XML 数据的序列化。有

关如何从 XML 转换为 CLR 用户定义类型的信息,请参阅对用户定义类型执行操作。有

关从其他数据类型转换为 xml 数据类型的信息,请参阅生成 XML 实例。

文本和图像数据类型

不支持对 text 和 image 数据类型进行自动数据类型转换。可将 text 数据显式转换为

字符数据,将 image 数据转换为 binary 或 varbinary,但最大长度是 8000 字节。

如果试图进行不正确的转换,如将包含字母的字符表达式转换为 int,则 SQL Server

将返回错误消息。

输出的排序规则

如果 CAST 或 CONVERT 的输出是字符串,并且输入也是字符串,则输出将与输入具

有相同的排序规则和排序规则标签。如果输入不是字符串,则输出采用数据库的默认排

序规则以及强制默认的排序规则标签。有关详细信息,请参阅排序规则优先顺序(Transact-SQL)。

若要为输出分配不同的排序规则,请将 COLLATE 子句应用于 CAST 或 CONVERT 函

数的结果表达式。例如:

SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS

截断结果和舍入结果

将字符或二进制表达式(char、nchar、nvarchar、varchar、binary 或varbinary)转换为其他数据类型的表达式时,可截断数据,仅显示部分数据,或返回错误(因为结

果太短而无法显示)。除了下表显示的转换,其他到 char、varchar、nchar、nvarchar、binary 和 varbinary 的转换都将被截断。

被转换的数据类型转换为的数据类型结果int、smallint 或 tinyint char *

varchar *

nchar E

nvarchar E money、smallmoney、numeric、decimal、float 或 real char E

varchar E

nchar E

nvarchar E * = 结果长度太短而无法显示。E = 因为结果长度太短无法显示而返回错误。

SQL Server 仅保证往返转换(即从原始数据类型进行转换后又返回原始数据类型的转换)在各版本间产生相同值。以下示例显示的即是这样的往返转换:

复制代码

DECLARE @myval decimal (5, 2)

SET @myval = 193.57

SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5))

-- Or, using CONVERT

SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval))

注意:

不要尝试构造 binary 值然后将其转换为数值数据类型类别的一种数据类型。SQL Server 不能保证 decimal 或 numeric 数据类型到 binary 的转换结果在 SQL Server 的各个版本中都相同。

以下示例显示了由于太小而无法显示的结果表达式。

复制代码

USE AdventureWorks;

GO

SELECT c.FirstName, stName, SUBSTRING(c.Title, 1, 25) AS Title, CAST(e.SickLeaveHours AS char(1)) AS 'Sick Leave'

FROM HumanResources.Employee e JOIN Person.Contact c ON

e.EmployeeID = c. ContactID

WHERE NOT EmployeeID >5

相关文档
最新文档