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