在 SQL Server 2012 中将表达式由一种数据类型转换为另一种数据类型。
语法
CAST ( expression AS data_type [ ( length ) ] )
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
参数
expression
任何有效的表达式。
data_type 
目标数据类型。这包括 xml、bigint 和 sql_variant。不能使用别名数据类型。
length
指定目标数据类型长度的可选整数。默认值为 30。
style
指定 CONVERT 函数如何转换 expression 的整数表达式。如果样式为 NULL,则返回 NULL。该范围是由 data_type 确定的。有关详细信息,请参阅“备注”部分。
返回类型
返回转换为 data_type 的 expression。
备注
Date 和 Time 样式
如果 expression 为 date 或 time 数据类型,则 style 可以为下表中显示的值之一。其他值作为 0 进行处理。SQL Server 使用科威特算法来支持阿拉伯样式的日期格式。
| 不带世纪数位 (yy) (1) | 
带世纪数位 (yyyy) | 
标准 | 
输入/输出 (3) | 
| – | 
0 或 100(1、2) | 
默认 | 
mon dd yyyy hh:miAM(或 PM) | 
| 1 | 
101 | 
美国 | 
mm/dd/yyyy | 
| 2 | 
102 | 
ANSI | 
yy.mm.dd | 
| 3 | 
103 | 
英国/法国 | 
dd/mm/yyyy | 
| 4 | 
104 | 
德语 | 
dd.mm.yy | 
| 5 | 
105 | 
意大利语 | 
dd-mm-yy | 
| 6 | 
106 (1) | 
– | 
dd mon yy | 
| 7 | 
107 (1) | 
– | 
Mon dd, yy | 
| 8 | 
108 | 
– | 
hh:mi:ss | 
| – | 
9 或 109(1、2) | 
默认格式 + 毫秒 | 
mon dd yyyy hh:mi:ss:mmmAM(或 PM) | 
| 10 | 
110 | 
美国 | 
mm-dd-yy | 
| 11 | 
111 | 
日本 | 
yy/mm/dd | 
| 12 | 
112 | 
ISO | 
yymmdd
 yyyymmdd  | 
| – | 
13 或 113(1、2) | 
欧洲默认格式 + 毫秒 | 
dd mon yyyy hh:mi:ss:mmm(24h) | 
| 14 | 
114 | 
– | 
hh:mi:ss:mmm(24h) | 
| – | 
20 或 120 (2) | 
ODBC 规范 | 
yyyy-mm-dd hh:mi:ss(24h) | 
| – | 
21 或 121 (2) | 
ODBC 规范(带毫秒) | 
yyyy-mm-dd hh:mi:ss.mmm(24h) | 
| – | 
126 (4) | 
ISO8601 | 
yyyy-mm-ddThh:mi:ss.mmm(无空格) | 
| – | 
127(6, 7) | 
带时区 Z 的 ISO8601。 | 
yyyy-mm-ddThh:mi:ss.mmmZ
 (无空格)  | 
| – | 
130 (1,2) | 
回历 (5) | 
dd mon yyyy hh:mi:ss:mmmAM | 
| – | 
131 (2) | 
回历 (5) | 
dd/mm/yy hh:mi:ss:mmmAM | 
1 这些样式值返回不确定的结果。包括所有 (yy)(不带世纪数位)样式和一部分 (yyyy)(带世纪数位)样式。
2 默认值(style0 或 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 位。根据需要使用科学记数法。 | 
| 1 | 
始终为 8 位值。始终使用科学记数法。 | 
| 2 | 
始终为 16 位值。始终使用科学记数法。 | 
| 126, 128, 129 | 
为了保持向后兼容而包括在内,在以后的版本中可能不推荐使用。 | 
money 和 smallmoney 样式
如果 expression 为 money 或 smallmoney,则 style 可以为下表中显示的值之一。其他值作为 0 进行处理。
| 值 | 
输出 | 
| 0(默认值) | 
小数点左侧每三位数字之间不以逗号分隔,小数点右侧取两位数,例如 4235.98。 | 
| 1 | 
小数点左侧每三位数字之间以逗号分隔,小数点右侧取两位数,例如 3,510.92。 | 
| 2 | 
小数点左侧每三位数字之间不以逗号分隔,小数点右侧取四位数,例如 4235.9819。 | 
| 126 | 
转换为 char(n) 或 varchar(n) 时,等同于样式 2 | 
xml 样式
如果 expression 为 xml,则 style 可以为下表中显示的值之一。其他值作为 0 进行处理。
| 值 | 
输出 | 
| 0(默认值) | 
使用默认的分析行为,即放弃无用的空格,且不允许使用内部 DTD 子集。
| 注意 | 
 
| 转换为 xml 数据类型时,SQL Server 的无用空格处理方式不同于 XML 1.0。有关详细信息,请参阅创建 XML 数据的实例。 | 
 
 
 | 
| 1 | 
保留无用空格。此样式设置将默认的 xml:space 处理方式设置为与指定了 xml:space=”preserve” 的行为相同。 | 
| 2 | 
启用有限的内部 DTD 子集处理。
 如果启用,则服务器可使用内部 DTD 子集提供的以下信息来执行非验证分析操作。 
- 应用属性的默认值。
 
- 解析并扩展内部实体引用。
 
- 检查 DTD 内容模型以实现语法的正确性。
 
 
分析器将忽略外部 DTD 子集。此外,不评估 XML 声明来查看 standalone 属性是设置为 yes 还是 no,而是将 XML 实例当成一个独立文档进行分析。  | 
| 3 | 
保留无用空格,并启用有限的内部 DTD 子集处理。 | 
二进制样式
如果 expression 为 binary(n)、varbinary(n)、char(n) 或 varchar(n),则 style 可以为下表中显示的值之一。表中没有列出的样式值将返回错误。
| 值 | 
输出 | 
| 0(默认值) | 
将 ASCII 字符转换为二进制字节,或者将二进制字节转换为 ASCII 字符。每个字符或字节按照 1:1 进行转换。
 如果 data_type 为二进制类型,则会在结果左侧添加字符 0x。  | 
| 1, 2 | 
如果 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。  |