
本文共 4610 字,大约阅读时间需要 15 分钟。
SQL Server CONVERT函数日期转换详解
CONVERT函数是SQL Server中一个强大的工具,用于将不同数据类型之间进行转换。特别是在日期时间类型与字符串类型之间转换时,CONVERT函数发挥着重要作用。本文将详细介绍CONVERT函数的日期转换特性,包括参数、样式以及实际应用示例。
CONVERT函数基本结构
CONVERT函数的基本语法如下:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
具体到日期转换场景,常见的使用形式为:
CONVERT(nvarchar(10),字段名,转换格式)
例如:
CONVERT(varchar(10),count_time,121)
数据类型参数说明
data_type:目标系统所提供的数据类型,包括 bigint
和 sql_variant
。需要注意的是,不能使用用户定义的数据类型。
expression:任何有效的Microsoft SQL Server表达式。例如,可以是字段名、函数返回值或直接的字面值。
length:对于 nchar
、nvarchar
、char
、varchar
、binary
或 varbinary
数据类型,length
是可选参数,用于指定字符数据的长度。
style:日期格式样式,用于将 datetime
或 smalldatetime
数据转换为字符数据(如 nchar
、nvarchar
等)或将浮点数、货币等类型转换为字符数据。
日期格式样式说明
SQL Server支持多种日期格式样式(style),具体如下:
style 值 | 描述 | 示例输出 |
---|---|---|
0或100 | 默认格式:mon dd yyyy hh:miAM 或mon dd yyyy hh:mi:ss:mmmAM | 05 16 2006 10:57AM |
1或101 | 美国格式:mm/dd/yyyy | 05/16/2006 |
2或102 | ANSI格式:yy.mm.dd | 06.05.16 |
3或103 | 英国/法国格式:dd/mm/yy | 16/05/06 |
4或104 | 德国格式:dd.mm.yy | 16.05.2006 |
5或105 | 意大利格式:dd-mm-yy | 16-05-2006 |
6或106 | 简化形式:dd mon yy | 16 05 2006 |
7或107 | 简化形式:mon dd, yy | 05 16, 2006 |
8或108 | 时间格式:hh:mm:ss | 10:57:46 |
9或109 | 包含时间的格式:hh:mm:ss:mmmAM | 05 16 2006 10:57:46:827AM |
10或110 | 美国格式(带连字符):mm-dd-yy | 05-16-06 |
11或111 | 日本格式:yy/mm/dd | 06/05/16 |
12或112 | ISO标准格式:yymmdd | 060516 |
13或113 | 欧洲默认格式:dd mon yyyy hh:mm:ss:mmm(24h) | 16 05 2006 10:57:46:937 |
14或114 | 时间格式:hh:mm:ss:mmm(24h) | 10:57:46 |
20或120 | ODBC标准格式:yyyy-mm-dd hh:mm:ss[.fff] | 2006-05-16 10:57:47 |
21或121 | ODBC带毫秒格式:yyyy-mm-dd hh:mm:ss[.fff] | 2006-05-16 10:57:47.157 |
126 | ISO8601格式(无空格):yyyy-mm-dd Thh:mm:ss.mmm | 2006-05-16T10:57:49.827 |
130或131 | Hijri日历格式:dd mon yyyy hh:mi:ss:mmmAM 或dd/mm/yy hh:mi:ss:mmmAM | 18 ???? ?????? 1427 10:57:49:907AM |
注意:默认值(如0或100、9或109、13或113、20或120、21或121)始终返回四位年份(yyyy),而不带世纪数位(yy)时,默认返回两位年份。两位年份的处理会受到截止年份的影响,默认截止年份为2049。例如,49会被解释为2049,而50会被解释为1950。
实际应用示例
以下是一些实际应用示例,展示了不同样式下的输出结果:
Select CONVERT(varchar(100), GETDATE(), 0)
:05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 1)
:05/16/06
Select CONVERT(varchar(100), GETDATE(), 2)
:06.05.16
Select CONVERT(varchar(100), GETDATE(), 3)
:16/05/06
Select CONVERT(varchar(100), GETDATE(), 4)
:16.05.06
Select CONVERT(varchar(100), GETDATE(), 5)
:16-05-06
Select CONVERT(varchar(100), GETDATE(), 6)
:16 05 06
Select CONVERT(varchar(100), GETDATE(), 7)
:05 16, 06
Select CONVERT(varchar(100), GETDATE(), 8)
:10:57:46
Select CONVERT(varchar(100), GETDATE(), 9)
:05 16 2006 10:57:46:827AM
Select CONVERT(varchar(100), GETDATE(), 10)
:05-16-06
Select CONVERT(varchar(100), GETDATE(), 11)
:06/05/16
Select CONVERT(varchar(100), GETDATE(), 12)
:060516
Select CONVERT(varchar(100), GETDATE(), 13)
:16 05 2006 10:57:46:937
Select CONVERT(varchar(100), GETDATE(), 14)
:10:57:46:967
Select CONVERT(varchar(100), GETDATE(), 20)
:2006-05-16 10:57:47
Select CONVERT(varchar(100), GETDATE(), 21)
:2006-05-16 10:57:47.157
Select CONVERT(varchar(100), GETDATE(), 22)
:05/16/06 10:57:47 AM
Select CONVERT(varchar(100), GETDATE(), 23)
:2006-05-16
Select CONVERT(varchar(100), GETDATE(), 24)
:10:57:47
Select CONVERT(varchar(100), GETDATE(), 25)
:2006-05-16 10:57:47.250
Select CONVERT(varchar(100), GETDATE(), 100)
:05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 101)
:05/16/2006
Select CONVERT(varchar(100), GETDATE(), 102)
:2006.05.16
Select CONVERT(varchar(100), GETDATE(), 103)
:16/05/2006
Select CONVERT(varchar(100), GETDATE(), 104)
:16.05.2006
Select CONVERT(varchar(100), GETDATE(), 105)
:16-05-2006
Select CONVERT(varchar(100), GETDATE(), 106)
:16 05 2006
Select CONVERT(varchar(100), GETDATE(), 107)
:05 16, 2006
Select CONVERT(varchar(100), GETDATE(), 108)
:10:57:49
Select CONVERT(varchar(100), GETDATE(), 109)
:05 16 2006 10:57:49:437AM
Select CONVERT(varchar(100), GETDATE(), 110)
:05-16-2006
Select CONVERT(varchar(100), GETDATE(), 111)
:2006/05/16
Select CONVERT(varchar(100), GETDATE(), 112)
:20060516
Select CONVERT(varchar(100), GETDATE(), 113)
:16 05 2006 10:57:49:513
Select CONVERT(varchar(100), GETDATE(), 114)
:10:57:49:547
Select CONVERT(varchar(100), GETDATE(), 120)
:2006-05-16 10:57:49
Select CONVERT(varchar(100), GETDATE(), 121)
:2006-05-16 10:57:49.700
Select CONVERT(varchar(100), GETDATE(), 126)
:2006-05-16T10:57:49.827
Select CONVERT(varchar(100), GETDATE(), 130)
:18 ???? ?????? 1427 10:57:49:907AM
Select CONVERT(varchar(100), GETDATE(), 131)
:18/04/1427 10:57:49:920AM
注意事项
默认截止年份:默认情况下,SQL Server根据截止年份2049解释两位数字的年份。例如,49会被解释为2049,而50会被解释为1950。为了确保日期转换的准确性,建议在转换时指定四位年份。
时间精度:从 smalldatetime
转换为字符数据时,如果包含秒或毫秒,结果中这些位置会显示零。因此,在转换时,可以通过指定适当的字符数据长度来截断不需要的日期部分。
Hijri日历:Hijri日历在SQL Server中使用科威特算法进行处理。需要注意的是,Hijri日历的转换格式可能与常见的格里高利日历有所不同,具体输出需要根据转换样式来定。
总结
CONVERT函数在SQL Server中是一个强大的工具,特别是在日期转换方面表现突出。通过合理选择 style
参数,可以根据不同需求生成所需的日期字符串格式。记住,合理使用默认值和样式参数,可以显著提升日期转换的准确性和可读性。
发表评论
最新留言
关于作者
