如果 expression 为 date 或 time 数据类型,则
style
可以为下表中显示的值之一。其他值作为 0 进行处理。SQL Server 使用科威特算法来支持阿拉伯样式的日期格式。
不带世纪数位 (yy) (
1
)带世纪数位 (yyyy)标准输入/输出 (
3
)
0
或
100
(
1,
2
)
mon dd yyyy hh:miAM(或 PM)
1 这些样式值将返回不确定的结果。包括所有 (yy)(不带世纪数位)样式和一部分 (yyyy)(带世纪数位)样式。
2 默认值(style
0
或
100
、
9
或
109
、
13
或
113
、
20
或
120
以及
21
或
121
)始终返回世纪数位 (yyyy)。
3 转换为
datetime
时输入;转换为字符数据时输出。
4 为用于 XML 而设计。对于从
datetime
或
smalldatetime
到字符数据的转换,其输出格式如上一个表所述。
5 回历是有多种变体的日历系统。SQL Server 使用科威特算法。
注意:默认情况下,SQL Server 基于截止年份 2049 年来解释两位数的年份。换言之,就是将两位数的年份 49 解释为 2049,将两位数的年份 50 解释为 1950。许多客户端应用程序(如基于自动化对象的应用程序)都使用截止年份 2030 年。SQL Server 提供了 two digit year cutoff 配置选项,可通过此选项更改 SQL Server 使用的截止年份,从而对日期进行一致处理。建议您指定四位数年份。
6 仅支持从字符数据转换为
datetime
或
smalldatetime
。仅表示日期或时间成分的字符数据转换为
datetime
或
smalldatetime
数据类型时,未指定的时间成分设置为 00:00:00.000,未指定的日期成分设置为 1900-01-01。
7使用可选的时间区域指示符 (Z) 更便于将具有时区信息的 XML
datetime
值映射到没有时区的 SQL Server
datetime
值。Z 是时区 UTC-0 的指示符。其他时区则以 + 或 - 方向的 HH:MM 偏移量来指示。例如:
2006-12-12T23:45:12-08:00
。
从
smalldatetime
转换为字符数据时,包含秒或毫秒的样式将在这些位置上显示零。使用相应的
char
或
varchar
数据类型长度从
datetime
或
smalldatetime
值转换时,可截断不需要的日期部分。
从样式包含时间的字符数据转换为
datetimeoffset
时,将在结果末尾追加时区偏移量。
float 和 real 样式
如果 expression 为
float
或
real
,则
style
可以为下表中显示的值之一。其他值作为 0 进行处理。
0
(默认值)
最多包含 6 位。根据需要使用科学记数法。
money 和 smallmoney 样式
如果 expression 为
money
或
smallmoney
,则
style
可以为下表中显示的值之一。其他值作为 0 进行处理。
0
(默认值)
小数点左侧每三位数字之间不以逗号分隔,小数点右侧取两位数,例如 4235.98。
二进制样式
如果 expression 为
binary(n)
、
varbinary(n)
、
char(n)
或
varchar(n)
,则 style 可以为下表中显示的值之一。表中没有列出的样式值将返回错误。
0
(默认值)
将 ASCII 字符转换为二进制字节,或者将二进制字节转换为 ASCII 字符。每个字符或字节按照 1:1 进行转换。
如果
data_type
为二进制类型,则会在结果左侧添加字符 0x。
如果
data_type
为二进制类型,则表达式必须为字符表达式。
expression
必须由数量为偶数的十六进制数字(0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F、a、b、c、d、e、f)组成。如果将
style
设置为 1,字符 0x 必须为表达式中的前两个字符。如果表达式中包含的字符数为奇数或者包含任何无效的字符,则会引发错误。
如果转换后的表达式长度大于
data_type
长度,则会在右侧截断结果。
如果固定长度
data_types
大于转换后的结果,则会在结果右侧添加零。
如果 data_type 为字符类型,则表达式必须为二进制表达式。每个二进制字符均转换为两个十六进制字符。如果转换后的表达式长度大于
data_type
长度,则会在右侧截断结果。
如果
data_type
为固定大小的字符类型,并且转换后的结果长度小于其
data_type
长度,则会在转换后的表达式右侧添加空格,以使十六进制数字的个数保持为偶数。
对于
style
1,将在转换后的结果左侧添加字符 0x。
隐式转换指那些没有指定 CAST 或 CONVERT 函数的转换。显式转换指那些需要指定 CAST 或 CONVERT 函数的转换。以下图例显示了可对 SQL Server 系统提供的数据类型执行的所有显式和隐式数据类型转换。其中包括
xml
、
bigint
和
sql_variant
。不存在对
sql_variant
数据类型的赋值进行的隐式转换,但是存在转换为
sql_variant
的隐式转换。
在
datetimeoffset
与字符类型
char
、
varchar
、
nchar
和
nvarchar
之间转换时,转换后的时区偏移量部分的 HH 和 MM 都应始终为两个数字,例如 -08:00。
注意:因为 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
数据类型。
当您将
xml
数据类型显式或隐式转换为字符串或二进制数据类型时,
xml
数据类型的内容将根据一组规则进行序列化。有关这些规则的信息,请参阅 XML 数据的序列化。有关如何从
XML 转换为 CLR 用户定义类型的信息,请参阅对用户定义类型执行操作。有关如何从其他数据类型转换到
xml
数据类型的信息。
不支持对
text
和
image
数据类型进行自动数据类型转换。可将
text
数据显式转换为字符数据,将
image
数据转换为
binary
或
varbinary
,但最大长度是 8000
字节。如果试图进行不正确的转换,如将包含字母的字符表达式转换为
int
,则 SQL Server
将返回错误消息。
如果 CAST 或 CONVERT
的输出是字符串,并且输入也是字符串,则输出将与输入具有相同的排序规则和排序规则标签。如果输入不是字符串,则输出采用数据库的默认排序规则以及强制默认的排序规则标签。
若要为输出分配不同的排序规则,请将 COLLATE 子句应用于 CAST 或 CONVERT 函数的结果表达式。例如:
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
* = 结果长度太短而无法显示。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 的各个版本中都相同。
转换小数位数不同的数据类型时,结果值有时被截断,有时被舍入。下表显示了此行为。
被转换的数据类型转换到的数据类型行为
numeric
numeric
SELECT CAST(10.6496 AS int)
在进行数据类型转换时,若目标数据类型的小数位数小于源数据类型的小数位数,则该值将被截断。例如,以下转换的结果为 $10.3497
:
SELECT CAST(10.3496847 AS money)
当非数字型 char、nchar、varchar 或 nvarchar 数据转换为 int、float、numeric 或 decimal 时,SQL Server 将返回错误消息。当空字符串 (" ") 转换为 numeric 或 decimal 时,SQL Server 也返回错误。
备注:文章转载来自官方在线文档。
作者:pursuer.chen
博客:http://www.cnblogs.com/chenmh
本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接,否则保留追究责任的权利。
《欢迎交流讨论》