SQL SERVER中的日期转换
在SQL Server中,通过使用getdate()函数可以查询当前日期,例如:
select getdate()
查询结果为:
2012-11-26 11:01:38.030
该值默认为datetime类型,其中包含了年、月、日、时、分、秒众多信息,并精确到了毫秒级。但如果在查询数据时只想取“年月日”,该如何截取呢?这时候可以使用convert函数,将某种数据类型转换为另一种数据类型。
convert的具体语法如下:
convert ( data_type [ ( length ) ] , expression [ , style ] )
参数含义如下:
Ø date_type:转换后的数据类型,如果没有精度定义需要,length可以省略;
Ø expression:要转换数据类型的SQL Server表达式;
Ø style:定义数据类型转换时的格式,下面列举几种常用的格式
年份表示(2位) |
年份表示(4位) |
输入/输出格式 |
- |
0 or 100 |
mon dd yyyy hh:miAM(or PM) |
1 |
101 |
mm/dd/yyyy |
2 |
102 |
yy.mm.dd |
3 |
103 |
dd/mm/yy |
4 |
104 |
dd.mm.yy |
5 |
105 |
dd-mm-yy |
6 |
106 |
dd mon yy |
7 |
107 |
mon dd,yy |
8 |
108 |
hh:mm:ss |
9 |
109 |
mon dd yyyy hh:mi:ss:mmmAM(or PM) |
10 |
110 |
mm-dd-yy |
11 |
111 |
yy/mm/dd |
12 |
112 |
yymmdd |
- |
13 or 113 |
dd mon yyyy hh:mm:ss:mmm(24h) |
14 |
114 |
hh:mi:ss:mmm(24h) |
- |
20 or 120 |
yyyy-mm-dd hh:mi:ss(24h) |
- |
21 or 121 |
yyyy-mm-dd hh:mi:ss:mmm(24h) |
举例如下:
(1)select convert(varchar,getdate(),100)
查询结果为:
11 26 2012 11:28AM
(2)select convert(varchar,getdate(),101)
查询结果为:
11/26/2012
(3)select convert(varchar,getdate(),1)
查询结果为:
11/26/12
(4)select convert(varchar,getdate(),108)
查询结果为:
13:04:51
(5)select convert(varchar,getdate(),111)
查询结果为:
2012/11/26
(6)select convert(varchar,getdate(),120)
查询结果为:
2012-11-26 13:06:07
严格来说,convert不属于日期处理函数,同样也可以对其他数据类型进行转换,只是它经常被用于日期处理中,所以在使用该函数的时候,需要注意要先把日期格式的字符串转换为日期型,然后才能利用convert进行日期格式转换,否则就变成字符串转换为字符串,此时的style选项是无效的。
举例如下:
declare @dt datetime –-声明变量dt的数据类型为datetime
set @dt='2012-11-26' –-为变量dt赋值,该日期为2012年11月26日
(1)将该日期转换为“dd/mm/yy”格式,设置style=103:
select convert(varchar,@dt,103)
查询结果为:
26/11/2012
(2)将该日期转换为“yy/mm/dd”格式,设置style=111:
select convert(varchar,@dt,111)
查询结果为:
2012/11/26
以上两个例子可以转换成功。
再看下面的例子:
select convert(varchar,'2012-11-26',103)
查询结果为:
2012-11-26
该转换并未成功,因为在此处'2012-11-26'是字符串类型,对其设置任何style值均无效。