导航

Transact-SQL 中的日期时间及相关函数

Posted on 2012-06-20 12:54  softwaror  阅读(382)  评论(0编辑  收藏  举报

一.日期时间类型

二.常用的日期时间相关函数

①.获取时间

精度较低的函数

select GETDATE() as getdate
select GETUTCDATE() as getutcdate

精度较高的函数

select SYSDATETIME() as sysdatetime
select SYSDATETIMEOFFSET() as sysdatetimeoffset --包含时区
select SYSUTCDATETIME() as sysutcdatetime


②.获取时间部分

datepart(datepart,date),返回date的datepart部分的整数

year(date),返回date的年的整数

month(date),返回date的月的整数

day(date),返回date的日的整数

参数说明,date即时间格式,我在微软帮助文档中查了下datepart枚举值如下图(左边一列为值,右边一列为缩写)

具体如:

select DATEPART(year,'2012-12-21') as 具体年
select DATEPART(yyyy,'2012-12-21') as 具体年  --(depart用的是缩写)
select DATEPART(mm,'2012-12-21') as 具体月  --(depart用的是缩写)
select DATEPART(YEAR,GETDATE()) as 当前年  --当前时间年
select DATEPART(MONTH,GETDATE()) as 当前月   --当前时间月
select DATEPART(DAY,GETDATE()) as 当前日   --当前时间日
select DATEPART(WEEK,GETDATE()) as 当前周   --当前时间是这年的第几周
select DATEPART(WEEKDAY,GETDATE()) as 当前星期   --当前时间是星期几,结果为4(即星期三,因为外国的周是从星期日开始的)

结果为:

③.时间操作

dateadd(datepart,number,date),返回日期加上number个datepart,如给日期加上2天,加上2秒,加上2周,depart参数同上图,number为增量

datediff(datepart,startdate,enddate),返回两个日期之间时间间隔,depart参数同上面图,startdate为开始时间,enddate为终止时间

isdate(expression),确定是否为有效的时间

具体如:

--日期增加
select DATEADD(year,2,getdate()) as 当前时间两年后
select DATEADD(day,10,'2011-12-11') as '2012-12-21'

--时间间隔
select DATEDIFF(DAY,getdate(),'2012-12-21') as 世界末日 --当前时间距离世界末日还有多少天
select DATEDIFF(DAY,getdate(),'2013-5-4') as 还没到    --当前时间到2013'五.四'还有多久
select DATEDIFF(month,getdate(),'2012-5-4') as 已过      --当前时间到2012'五.四'还有多久,结果为负1,因为当前时间为2012年6月了,已经超过一个月了

结果为:

④.时间显示格式转换,详细请参见:http://msdn.microsoft.com/zh-cn/library/ms187928.aspx

此函数来源于CONVERT(date-type[(length)],expression[,style]),如果 expression 为 date 或 time 数据类型,则 style 可以为下表中显示的值之一:

 具体如:

/*1.第一个参数为数据类型,为你要把时间转换为的数据类型,可用varchar,带上类型范围也行,但要能容纳目的转换类型,不然会截断结果
2.第三个参数可参看上图中*/
select CONVERT(varchar(10), getdate(), 111 ) as 带类型范围
select CONVERT(varchar, getdate(), 111 ) as 不带类型范围
select CONVERT(int, getdate(), 111 ) as 转换为整数 --有时可能也有点用处,暂时不知道
select CONVERT(varchar(3), getdate(), 111 ) as 截断了 --目的类型太短,把转换的数据截取了

select CONVERT(nvarchar, getdate(), 111 )
select CONVERT(varchar(12) , getdate(), 101 )
select CONVERT(varchar, getdate(), 102 )
select CONVERT(varchar(20) , getdate(), 103 )
select CONVERT(nvarchar, getdate(), 120 )

结果: