DATEDIFF() SQL 函数

2025年3月17日 | 阅读 7 分钟

在结构化查询语言(SQL)中,DATEDIFF() 是用于确定两个日期或时间间隔之间差值的函数。它是由 SQL 提供的一个强大函数,用于管理时间和日期。

DATEDIFF() SQL Function

本文将介绍 DATEDIFF() SQL 函数、其语法、用途及示例。

DATEDIFF() 函数语法

在上述语法中,'interval' 定义了您想要查找差值的时间单位。interval 的值可以是 day, month, year, minute, hour, second, week 等。'startDate' 是开始日期或时间。'endDate' 是结束日期或时间。

带有缩写的 interval 值列表

Interval缩写
年份year, yy, yyyy
Dayday, dd, d
月份month, mm, m
Quarterquarter, qq, q
week, ww, wk
Nanosecondnanosecond, ns
Microsecondmicrosecond, us
Millisecondmillisecond, ms
第二个second, ss, s
分钟minute, mi
小时hour, hh

DATEDIFF() 函数的用途

  • 事件之间的时间间隔:用于计算两个事件之间的时间间隔。
  • 调度和规划:用于找出完成特定任务所需的时间。
  • 年龄计算:根据出生日期和当前日期,帮助计算人员年龄。
  • 学术周期:帮助计算学术课程的长度。
  • 库存管理:帮助追踪产品的保质期或存储期。
  • 到期和续订日期:帮助找出到期和续订日期的剩余时间,以管理保修、许可证等。
  • 旅行时长:旅行网站使用此函数来计算行程时长。
  • 贷款计算:银行系统使用此函数根据贷款的开始和结束日期来查找贷款期限和利率。
  • 订阅服务:通过计算用户的剩余订阅时间来帮助处理订阅服务。
  • 项目管理:项目管理工具帮助查找任务时长、项目完成日期等。
  • 员工请假管理:HR 系统使用此函数来跟踪员工的请假期限。

Microsoft SQL Server 中 DATEDIFF() 函数的示例

我们将通过示例来充分理解 DATEDIFF() 函数。

注意:我们将使用 Microsoft SQL Server 的语法。不同数据库的语法可能有所不同。

示例 1

让我们考虑一个名为 'Orders' 的表,其中包含 orderId、orderDate 和 deliveryDate 字段。

Orders 表

orderIdorderDatedeliveryDate
12023-05-282023-06-28
22023-07-252023-08-21
32023-06-202023-08-29
42023-08-012023-08-30
52023-06-192023-07-26

1. 我们将考虑上述 'Orders' 表,并计算 orderDate 和 deliveryDate 之间的天数差。

我们将使用给定语句来查找天数

我们将使用给定语句来查找年数

orderIdorderDatedeliveryDatedaysDifference
12023-05-282023-06-2831
22023-07-252023-08-2127
32023-06-202023-08-2970
42023-08-012023-08-3029
52023-06-192023-07-2637

2. 我们将考虑上述 'Orders' 表,并计算 orderDate 和 deliveryDate 之间的年数差。


orderIdorderDatedeliveryDateyearsDifference
12023-05-282023-06-280
22023-07-252023-08-210
32023-06-202023-08-290
42023-08-012023-08-300
52023-06-192023-07-260

3. 我们将考虑上述 'Orders' 表,并计算 orderDate 和 deliveryDate 之间的月数差。

我们将使用给定语句来查找月数


orderIdorderDatedeliveryDatemonthsDifference
12023-05-282023-06-281
22023-07-252023-08-211
32023-06-202023-08-292
42023-08-012023-08-300
52023-06-192023-07-261

示例 2

让我们考虑一个名为 'Products' 的表,其中包含 productId、productName 和 releaseDate 字段。

产品表

productIdproductNamereleaseDate
100冰箱2023-06-23
101电视2022-07-10
102Washing Machine2021-05-24
103Coffee Maker2020-04-20
104打印机2021-02-19

我们将考虑上述 'Products' 表,并计算产品 releaseDate 以来的月数。

我们将使用给定语句来查找月数

让我们考虑一个名为 'Employees' 的表,其中包含 employeeId、Name、hireDate 和 terminationDate 字段。

productIdproductNamereleaseDatemonths_since_release
100冰箱2023-06-231
101电视2022-07-1012
102Washing Machine2021-05-2426
103Coffee Maker2020-04-2039
104打印机2021-02-1929

示例 3

Employees 表

employeeId名称hireDateterminationDate
200Anshika2020-05-212022-05-25
201Shruti2021-04-122022-05-20
202Deepanshu2021-08-182023-09-11
203Milan2022-05-272023-06-14
204Harsh2023-01-202023-07-19

我们将考虑上述 'Employees' 表,并计算员工的工作年限。

我们将使用给定语句来查找年数


employeeId名称hireDateterminationDateyears_worked
200Anshika2020-05-212022-05-252
201Shruti2021-04-122022-05-201
202Deepanshu2021-08-182023-09-112
203Milan2022-05-272023-06-141
204Harsh2023-01-202023-07-190

示例 4

让我们考虑一个名为 'Meetings' 的表,其中包含 meetingId、startTime 和 endTime 字段。

Meetings 表

meetingIdstartTimeendTime
12023-07-18 09:002023-07-18 10:00
22023-07-18 11:002023-07-18 12:00
32023-07-19 10:002023-07-19 12:30
42023-07-20 11:002023-07-20 12:30
52023-07-20 05:002023-07-20 06:00

我们将考虑上述 'Meetings' 表,并计算每次会议的时长(以分钟为单位)。

要找出每次会议的持续时间,我们将使用给定语句


meetingIdstartTimeendTimemeeting_duration_minutes
12023-07-18 09:002023-07-18 10:0060
22023-07-18 11:002023-07-18 12:0060
32023-07-19 10:002023-07-19 12:30150
42023-07-20 11:002023-07-20 12:3090
52023-07-20 05:002023-07-20 06:0060

示例 5

让我们考虑一个名为 'Persons' 的表,该表具有 personId、Name 和 birthDate 字段。

Meetings 表

personId名称birthDate
1Rahul2000-06-14
2Kajal2005-01-20
3Manish2010-02-25
4拉格哈夫1999-11-27
5Nishant1996-05-10

我们将考虑上述 'Persons' 表,并计算每个人的年龄(以年为单位)。

我们将使用给定语句来查找每个人的年龄


personId名称birthDateage_years
1Rahul2000-06-1423
2Kajal2005-01-2018
3Manish2010-02-2513
4拉格哈夫1999-11-2724
5Nishant1996-05-1027

示例 6

让我们考虑一个名为 'Subscriptions' 的表,其中包含 subscriptionId、startDate 和 endDate 字段。

Meetings 表

subscriptionIdstartDateendDate
12022-11-132023-06-06
22022-12-102023-05-12
32023-04-052023-07-04
42023-05-022023-06-25
52023-03-182023-07-05

我们将考虑上述 'Subscriptions' 表,并计算每个订阅的时长(以周为单位)。

我们将使用给定语句来查找每个订阅的时长


subscriptionIdstartDateendDateduration_weeks
12022-11-132023-06-0629
22022-12-102023-05-1222
32023-04-052023-07-0413
42023-05-022023-06-258
52023-03-182023-07-0516

示例 7

让我们考虑一个名为 'Projects' 的表,其中包含 projectId、startDate 和 endDate 字段。

Projects 表

projectIdstartDateendDate
12023-01-102023-05-02
22023-03-092023-07-13
32023-04-162023-05-11
42023-02-112023-04-30
52023-06-022023-08-25

我们将考虑上述 'Projects' 表,并计算每个项目的时长(以天为单位)。

我们将使用给定语句来查找每个项目的时长


projectIdstartDateendDateproject_duration_days
12023-01-102023-05-02112
22023-03-092023-07-13126
32023-04-162023-05-1125
42023-02-112023-04-3078
52023-06-022023-08-2584

示例 8

让我们考虑一个名为 'Logs' 的表,该表具有 logId、logTime 和 previousLogTime 字段。

Logs 表

logIdlogTimepreviousLogTime
12023-07-21 10:302023-07-21 09:00
22023-07-21 09:302023-07-21 08:00
32023-07-21 11:302023-07-21 10:00
42023-07-21 05:302023-07-21 03:00
52023-07-21 07:002023-07-21 06:00

我们将考虑上述 'Logs' 表,并计算 logTime 和 previousLogTime 之间的时间差(以分钟为单位)。

我们将使用给定语句来查找时间差


logIdlogTimepreviousLogTimetime_diff_minutes
12023-07-21 10:302023-07-21 09:0090
22023-07-21 09:302023-07-21 08:0090
32023-07-21 11:302023-07-21 10:0090
42023-07-21 05:302023-07-21 03:00150
52023-07-21 07:002023-07-21 06:0060

示例 9

让我们考虑一个名为 'Users' 的表,其中包含 userId、Name 和 lastLoginDate 字段。

Users 表

userId名称lastLoginDate
1Abhishek2023-06-19
2Vishal2023-05-01
3Avni2023-07-02
4Khushi2023-06-10
5Himanshu2023-07-05

我们将考虑上述 'Users' 表,并计算每个用户上次登录以来的天数。

我们将使用给定语句来查找天数


userId名称lastLoginDatedays_since_last_login
1Abhishek2023-06-1934
2Vishal2023-05-0183
3Avni2023-07-0221
4Khushi2023-06-1043
5Himanshu2023-07-0518

示例 10

让我们考虑一个名为 'Sales' 的表,其中包含 saleId、saleDate 和 previous_quarter_end_date 字段。

Sales 表

saleIdsaleDateprevious_quarter_end_date
12023-05-012023-04-02
22023-06-092023-05-06
32023-07-182023-06-17
42023-06-182023-05-06
52023-07-162023-06-10

我们将考虑上述 'Sales' 表,并计算 saleDate 和 previous_quarter_end_date 之间的季度数。

我们将使用给定语句来查找季度数


saleIdsaleDateprevious_quarter_end_datequartersDifference
12023-05-012023-04-020
22023-06-092023-05-060
32023-07-182023-06-171
42023-06-182023-05-060
52023-07-162023-06-101

结论

在本文中,我们学习了 DATEDIFF() SQL 函数,它用于查找两个间隔之间的差值。我们获得了关于此函数用途的知识。我们通过各种示例了解了 DATEDIFF() SQL 函数在实际场景中的用法,例如计算人员年龄、计算两个日期或时间之间的差值等等。