SQL Server DATEDIFF() 函数
在 SQL Server 中,DATEDIFF()
函数以整数形式返回指定开始日期和结束日期之间的差值。它可以是基于传递的 datepart 参数的天、月、周、小时、秒等之间的差值。
语法
DATEDIFF(datepart, startdate, enddate)
参数
datepart: 它是日期的部分,例如日、月、年、周等。它是 DATEDIFF()
函数返回开始日期和结束日期之间差值的单位,例如,如果 datepart 是日,则它返回以日为单位的差值。
Datepart | Datepart 缩写 |
---|---|
年 | y, yy, yyyy |
季度 | qq, q |
月 | mm, m |
一年中的第几天 | dy |
日 | dd, d |
周 | wk, ww |
小时 | hh |
分钟 | mi, n |
秒 | ss, s |
毫秒 | ms |
微秒 | mcs |
纳秒 | ns |
startdate: 起始日期时间值。
enddate: 结束日期时间值。
差值将计算为 startdate - enddate
。startdate 和 enddate 必须是可解析为 DATE、DATETIME、TIME、SMALLDATETIME、DATETIMEOFFSET 类型的格式。
返回值
返回一个整数值,该整数值是指定开始日期和结束日期之间的差值。
如果结果超出整数范围(-2,147,483,648 到 +2,147,483,647),则返回错误。使用 DATEDIFF_BIG()
函数来处理 startdate 和 enddate 值之间的较大差值。
如果开始日期和结束日期都是时间值且 datepart 不是时间 datepart,则 DATEDIFF()
返回零。
DATEDIFF()
使用 startdate 或 enddate 的时区偏移量组件来计算返回值。
获取日期之间的天数差
SELECT DATEDIFF(day, '01/10/2022 4:23:00', '01/11/2022 8:23:00') AS ReturnDate

在下面的示例中,startdate 大于 enddate,因此 DATEDIFF()
函数返回一个负值。
SELECT DATEDIFF(day, '12/23/22', '01/11/2022') AS ReturnDate

将 DATEDIFF() 与列一起使用
在下面的示例中,DATEDIFF()
函数与 Employee
表的 HireDate
列和返回当前日期时间值的 GETDATE() 函数一起使用。它返回从员工的入职日期起经过的月数,以及 EmployeeId
和 FirstName
。
SELECT EmployeeID, FirstName, DATEDIFF(mm, HireDate, GETDATE()) AS TimeInMonths
FROM Employee

获取时间之间的差值
当 datepart 参数为 HH
、MI
和 SS
时,DATEDIFF()
函数还可以返回指定时间值之间的差值。
select datediff(HH,'3:22:59','4:23:50') as HoursDiff,
datediff(MI,'3:20:59','4:23:50') as MinsDiff,
datediff(SS,'4:22:59', '4:23:50') as SecDiff;
