SQL Server中的Datediff函数
1、描述:返回两个日期之间的时间间隔, 用于判断在两个日期之间存在的指定时间间隔的数目。
2、语法:DateDiff(interval, startdate, enddate)
3、各个属性描述如下:
a、interval:必选。字符串表达式,表示用于计算 startdate 和 enddate 之间的时间间隔。有关数值,可以参考“interval参数表”。
b、startdate:计算的开始日期。startdate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。 因为 smalldatetime 只精确到分钟,所以当用 smalldatetime 值时,秒和毫秒总是 0。如果只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果 two digit year cutoff 为 2049(默认),则 49 被解释为 2049,2050 被解释为 1950。为避免模糊,请使用四位数的年份。
c、enddate:计算的终止日期。enddate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。
d、返回类型:integer,两个日期之间的差值
4、说明:
a、要计算 startdate 和 enddate 相差的天数,可以使用“一年的日数”(“y”)或“日”(“d”)。当 interval 为“一周的日数”(“w”)时,DateDiff 返回两个日期之间的星期数。如果 startdate 是星期一,则 DateDiff 计算到 enddate 之前星期一的数目。此结果包含 enddate 而不包含 startdate。如果 interval 是“周”(“ww”),则 DateDiff 函数返回日历表中两个日期之间的星期数。函数计算 startdate 和 enddate 之间星期日的数目。如果 enddate 是星期日,DateDiff 将计算 enddate,但即使 startdate 是星期日,也不会计算 startdate。
b、startdate 是从 enddate 减去。如果 startdate 比 enddate 晚,返回负值。
c、当结果超出整数值范围,DATEDIFF 产生错误。对于毫秒,最大数是 24 天 20 小时 31 分钟零 23.647 秒。对于秒,最大数是 68 年。
5、interval参数表:
序号 |
日期部分 |
缩写 |
中文描述 |
1 |
year |
yy,yyyy |
年 |
2 |
quarter |
qq,q |
季度 |
3 |
dayofyear |
dy,y |
一年的日数(按年来计算有多少天) |
4 |
month |
mm,m |
月 |
5 |
day |
dd,d |
日 |
6 |
week |
wk,ww |
周 |
7 |
|
w |
一周的日数(按周来计算有多少天) |
8 |
hour |
hh |
小时 |
9 |
minute |
mi,n |
分 |
10 |
second |
ss,s |
秒 |
11 |
millisecond |
ms |
毫秒 |
6、实例:
--计算当前日期和指点日期之间的时间间隔
--当前日期:2015-05-06(因时间一直在表所以存在误差) 指定日期:2014-05-06
select getDATE()
--1、年
select datediff(year,'2014-05-06',getdate());--output:1
select datediff(year,getdate(),'2014-05-06');--output:-1
select datediff(year,getdate(),getdate());--output:0
--2、季度
select datediff(quarter,'2014-05-06',getdate());--output:4
--3、一年的日数(按年来计算有多少天)
select datediff(dayofyear,'2014-05-06',getdate());--output:365
select datediff(y,'2007-05-06','2008-05-06');--output:366
--4、月
select datediff(month,'2014-05-06',getdate());--output:12
--5、日
select datediff(day,'2014-05-06',getdate());--output:365
select datediff(day,'2007-05-06','2008-05-06');--output:366
--6、周
select datediff(week,'2014-05-06',getdate());--output:52
select datediff(ww,'2015-04-06',getdate());--output:4
--7、一周的日数(按周来计算有多少天)
select datediff(w,'2014-05-06',getdate());--output:365
select datediff(w,'2015-04-06',getdate());--output:30
--8、小时
select datediff(hour,'2014-05-06',getdate());--output:8770
select datediff(hour,'2015-04-06',getdate());--output:730(30*24+10点)
--9、分钟
select datediff(minute,'2015-05-06 11:00:00',getdate());--output:3
--10、秒
select datediff(second,'2015-05-06 11:00:00',getdate());--output:200
--11、毫秒
select datediff(millisecond,'2015-05-06 11:00:00',getdate());--output:238190
由上面的实例可以看出:dayofyear和day输出的结果是一样的。