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参数表:

日期部分 缩写 中文描述
year yy,yyyy
quarter qqq 季度
 dayofyear  dy,y  一年的日数(按年来计算有多少天)
 month  mm,m  月
 day  dd,d  日
 week  wk,ww  周
   dw, w  一周的日数(按周来计算有多少天)
 hour  hh  小时
 minute  mi,n  分
 second  ss,s  秒
 millisecond  ms  毫秒

6、实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
--计算当前日期和指点日期之间的时间间隔
--当前日期: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
posted @   Ning-  阅读(825)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
点击右上角即可分享
微信分享提示