1. 語法
CONVERT( data_type [ ( length ) ] , expression [ , style ] )
data_type
目标数据类型。这包括xml, bigint,和sql_variant。不能使用别名数据类型。
长度
指定目标数据类型长度的可选整数。默认值为 30。
样式
是一个整数表达式指定如何将转换 CONVERT
函数表达式。
2. Date 和 Time 样式
当表达式是日期或时间数据类型,样式可以是下表中显示的值之一。其他值作为0 进行处理。。开头SQL Server 2012、当从转换时,支持的唯一样式日期和时间类型datetimeoffset是0 或 1。所有其他转换样式均返回错误 9809。
SQLServer 使用科威特算法来支持阿拉伯样式的日期格式。
在表中,左侧的两列表示将 datetime 或smalldatetime 转换为字符数据的 style 值。给 style 值加 100,可获得包括世纪数位的四位年份 (yyyy)。
不带世纪 (yy) (1) |
带世纪数位 (yyyy) |
Standard |
输入/输出 (3) |
- |
0 or 100 (1,2) |
datetime 和 smalldatetime 的默认值 |
mon dd yyyy hh:miAM(或 PM) |
1 |
101 |
美国 |
1 = mm/dd/yy |
2 |
102 |
ANSI |
2 = yy.mm.dd |
3 |
103 |
英国/法国 |
3 = dd/mm/yy |
4 |
104 |
德语 |
4 = dd.mm.yy |
5 |
105 |
意大利语 |
5 = dd-mm-yy |
6 |
106 (1) |
- |
6 = dd mon yy |
7 |
107 (1) |
- |
7 = Mon dd, yy |
8 |
108 |
- |
hh:mi:ss |
- |
9 or 109 (1,2) |
默认格式 + 毫秒 |
mon dd yyyy hh:mi:ss:mmmAM(或 PM) |
10 |
110 |
USA |
10 = mm-dd-yy |
11 |
111 |
日本 |
11 = yy/mm/dd |
12 |
112 |
ISO |
12 = yymmdd |
- |
13 or 113 (1,2) |
欧洲默认格式 + 毫秒 |
dd mon yyyy hh:mi:ss:mmm(24h) |
14 |
114 |
- |
hh:mi:ss:mmm(24h) |
- |
20 or 120 (2) |
ODBC 规范 |
yyyy-mm-dd hh:mi:ss(24h) |
- |
21 or 121 (2) |
time、date、datetime2 和 datetimeoffset 的 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) |
Hijri (5) |
dd mon yyyy hh:mi:ss:mmmAM |
- |
131 (2) |
Hijri (5) |
dd/mm/yyyy hh:mi:ss:mmmAM |
1这些样式的值将返回具有不确定性的结果。包括所有(yy)(不带世纪数位)样式和一部分 (yyyy)(带世纪数位)样式。
2 The default values (style0 or 100, 9 or 109, 13 or 113, 20 or 120,and 21 or 121) always return the century (yyyy).
3输入转换为datetime;输出转换为字符数据时。
4专用于 XML。有关从转换datetime或smalldatetime为字符数据时,输出格式是上表中所述。
5回历是具有几种变体的日历系统。 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,包括秒或毫秒的样式显示在这些位置的零。当从转换情况下可以截断不需要的日期部分datetime或smalldatetime通过使用适当的值char或varchar数据类型长度。
转换为datetimeoffset从字符数据,包括时间样式,时区偏移量追加到结果。
3. 语句结果
SELECT CONVERT(varchar(100), GETDATE(), 0) 07 152009 4:06PM
SELECT CONVERT(varchar(100), GETDATE(), 1)07/15/09
SELECT CONVERT(varchar(100), GETDATE(), 2)09.07.15
SELECT CONVERT(varchar(100), GETDATE(), 3)15/07/09
SELECT CONVERT(varchar(100), GETDATE(), 4)15.07.09
SELECT CONVERT(varchar(100), GETDATE(), 5)15-07-09
SELECT CONVERT(varchar(100), GETDATE(), 6) 15 0709
SELECT CONVERT(varchar(100), GETDATE(), 7) 0715, 09
SELECT CONVERT(varchar(100), GETDATE(), 8)16:06:26
SELECT CONVERT(varchar(100), GETDATE(), 9) 07 152009 4:06:26:513PM
SELECT CONVERT(varchar(100), GETDATE(), 10)07-15-09
SELECT CONVERT(varchar(100), GETDATE(), 11)09/07/15
SELECT CONVERT(varchar(100), GETDATE(), 12)090715
SELECT CONVERT(varchar(100), GETDATE(), 13) 1507 2009 16:06:26:513
SELECT CONVERT(varchar(100), GETDATE(), 14)16:06:26:513
SELECT CONVERT(varchar(100), GETDATE(), 20)2009-07-15 16:06:26
SELECT CONVERT(varchar(100), GETDATE(), 21)2009-07-15 16:06:26.513
SELECT CONVERT(varchar(100), GETDATE(), 22)07/15/09 4:06:26 PM
SELECT CONVERT(varchar(100), GETDATE(), 23)2009-07-15
SELECT CONVERT(varchar(100), GETDATE(), 24)16:06:26
SELECT CONVERT(varchar(100), GETDATE(), 25)2009-07-15 16:06:26.513
SELECT CONVERT(varchar(100), GETDATE(), 100) 0715 2009 4:06PM
SELECT CONVERT(varchar(100), GETDATE(), 101)07/15/2009
SELECT CONVERT(varchar(100), GETDATE(), 102)2009.07.15
SELECT CONVERT(varchar(100), GETDATE(), 103)15/07/2009
SELECT CONVERT(varchar(100), GETDATE(), 104)15.07.2009
SELECT CONVERT(varchar(100), GETDATE(), 105)15-07-2009
SELECT CONVERT(varchar(100), GETDATE(), 106) 1507 2009
SELECT CONVERT(varchar(100), GETDATE(), 107) 0715, 2009
SELECT CONVERT(varchar(100), GETDATE(), 108)16:06:26
SELECT CONVERT(varchar(100), GETDATE(), 109) 0715 2009 4:06:26:513PM
SELECT CONVERT(varchar(100), GETDATE(), 110)07-15-2009
SELECT CONVERT(varchar(100), GETDATE(), 111)2009/07/15
SELECT CONVERT(varchar(100), GETDATE(), 112)20090715
SELECT CONVERT(varchar(100), GETDATE(), 113) 1507 2009 16:06:26:513
SELECT CONVERT(varchar(100), GETDATE(), 114)16:06:26:513
SELECT CONVERT(varchar(100), GETDATE(), 120)2009-07-15 16:06:26
SELECT CONVERT(varchar(100), GETDATE(), 121)2009-07-15 16:06:26.513
SELECT CONVERT(varchar(100), GETDATE(), 126)2009-07-15T16:06:26.513
SELECT CONVERT(varchar(100), GETDATE(), 130) 23??? 1430 4:06:26:513PM
SELECT CONVERT(varchar(100), GETDATE(), 131)23/07/1430 4:06:26:513PM