一.日期时间类型
二.常用的日期时间相关函数
①.获取时间
精度较低的函数
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 )
结果: