2024年3月5日发(作者:)

SQL Server 日期格式转换(Convert用法)

2008-01-21 20:40

SQL Server中,Convert可以将日期转换成不同格式,格式控制是由CONVERT

(data_type[(length)], expression [, style])中的style来完成的。下面列出了style取各种值时的效果:

在表中,左侧的两列表示将 datetime 或

smalldatetime 转换为字符数据的

style 值。给

style 值加 100,可获得包括世纪数位的四位年份 (yyyy)。

不带世纪数位

(yy)

-

1

2

3

4

5

6

7

8

-

带世纪数位

(yyyy)

0 或 100 (*) 默认值

101

102

103

104

105

106

107

108

美国

ANSI

英国/法国

德国

意大利

-

-

-

标准

输入/输出**

mon dd yyyy hh:miAM(或 PM)

mm/dd/yyyy

dd/mm/yy

dd-mm-yy

dd mon yy

mon dd, yy

hh:mm:ss

mon dd yyyy

hh:mi:ss:mmmAM(或

PM)

mm-dd-yy

yy/mm/dd

yymmdd

9 或 109 (*) 默认值 + 毫秒

10

11

12

-

14

-

-

-

110

111

112

美国

日本

ISO

13 或 113 (*) 欧洲默认值 + 毫秒 dd mon yyyy

hh:mm:ss:mmm(24h)

114 - hh:mi:ss:mmm(24h)

20 或 120 (*) ODBC 规范

yyyy-mm-dd

hh:mm:ss[.fff]

21 或 121 (*) ODBC 规范(带毫秒)

yyyy-mm-dd

hh:mm:ss[.fff]

126(***) ISO8601 yyyy-mm-dd

Thh:mm:ss:mmm(不含

空格)

-

-

130*

131*

科威特

科威特

dd mon yyyy

hh:mi:ss:mmmAM

dd/mm/yy

hh:mi:ss:mmmAM

* 默认值(style 0 或 100、9 或 109、13 或 113、20 或 120、21 或 121)始终返回世纪数位 (yyyy)。

** 当转换为 datetime 时输入;当转换为字符数据时输出。

*** 专门用于 XML。对于从 datetime 或 smalldatetime 到 character 数据的转换,输出格式如表中所示。对于从 float、money 或 smallmoney 到

character 数据的转换,输出等同于

style 2。对于从 real 到 character 数据的转换,输出等同于

style 1。

重要 默认情况下,SQL Server 根据截止年份 2049 解释两位数字的年份。即,两位数字的年份 49 被解释为 2049,而两位数字的年份 50

被解释为 1950。许多客户端应用程序(例如那些基于 OLE 自动化对象的客户端应用程序)都使用 2030 作为截止年份。SQL Server 提供一个配置选项("两位数字的截止年份"),借以更改 SQL Server 所使用的截止年份并对日期进行一致性处理。然而最安全的办法是指定四位数字年份。

当从 smalldatetime 转换为字符数据时,包含秒或毫秒的样式将在这些位置上显示零。当从 datetime 或 smalldatetime 值进行转换时,可以通过使用适当的 char 或 varchar 数据类型长度来截断不需要的日期部分。

如果想去掉字符串中的分隔符,可以用replace函数。比如:replace(replace(replace(replace(convert(varchar(30),getdate(),121),'-',''),' ',''),':',''),'.','')

例如:

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