摘要:在本教程中,您将学习如何使用 SQL DATEDIFF() 函数来计算两个日期之间的差值。
请注意,DATEDIFF 函数并未包含在 SQL 标准中,但由 SQL Server、MySQL 和 MariaDB 实现。
SQL DATEDIFF 函数简介 #
要计算两个日期之间的差值,您可以使用 DATEDIFF() 函数。
这是 DATEDIFF() 函数在 SQL Server 中的语法:
DATEDIFF ( datepart , startdate , enddate )Code language: SQL (Structured Query Language) (sql)在此语法中:
datepart是您希望函数返回startdate和enddate之间差值的单位,例如年、月、日、小时、分钟和秒。startdate是开始日期(或日期时间、时间、时间戳等)。enddate是结束日期(或日期时间、时间、时间戳等)。
该函数返回一个带符号的整数值,其单位由 datepart 参数指定。
下表展示了 SQL Server 中有效的日期单位:
| datepart (日期部分) | Abbreviations (缩写) |
|---|---|
| year (年) | yy, yyyy |
| quarter (季度) | qq, q |
| month (月) | mm, m |
| dayofyear (年中的天) | dy, y |
| day (天) | dd, d |
| week (周) | wk, ww |
| weekday (星期) | dw, w |
| hour (小时) | hh |
| minute (分钟) | mi, n |
| second (秒) | ss, s |
| millisecond (毫秒) | ms |
| microsecond (微秒) | mcs |
| nanosecond (纳秒) | ns |
SQL DATEDIFF 函数示例 #
让我们看一些使用 DATEDIFF 函数的例子。
计算年、日和月的差值 #
以下查询使用 DATEDIFF 函数返回两个日期之间的年数:
SELECT DATEDIFF(year,'2015-01-01','2018-01-01');Code language: SQL (Structured Query Language) (sql)输出
3Code language: SQL (Structured Query Language) (sql)要获取两个日期之间的月或日差值,您可以相应地将第一个参数更改为 month 或 day。例如:
SELECT DATEDIFF(month,'2015-01-01','2018-01-01'),
DATEDIFF(day,'2015-01-01','2018-01-01');Code language: SQL (Structured Query Language) (sql)输出
m d
----------- -----------
36 1096Code language: SQL (Structured Query Language) (sql)请注意,DATEDIFF() 函数会考虑闰年。
由于 2016 年是闰年,因此两个日期 '2015-01-01' 和 '2018-01-01' 之间的天数差为 2×365 + 366 = 1096。
计算小时差值 #
以下查询使用 DATEDIFF() 函数计算两个 DATETIME 值之间的小时差:
SELECT DATEDIFF(hour,'2015-01-01 01:00:00','2015-01-01 03:00:00');Code language: SQL (Structured Query Language) (sql)输出
2Code language: SQL (Structured Query Language) (sql)考虑以下示例:
SELECT DATEDIFF(hour,'2015-01-01 01:00:00','2015-01-01 03:45:00');Code language: SQL (Structured Query Language) (sql)它也返回 2。
2
Code language: SQL (Structured Query Language) (sql)原因是 DATEDIFF() 函数只返回一个整数。在这种情况下,它截断了分钟部分,只考虑了小时部分。
使用 DATEDIFF 处理表数据的示例 #
我们将使用 HR 示例数据库中的 employees 表。

以下查询使用 DATEDIFF() 函数计算截至 2018 年 1 月 1 日 员工的服务年限:
SELECT
first_name,
last_name,
DATEDIFF (YEAR, hire_date, '2018-01-01') year_of_services
FROM
employees
ORDER BY
first_name;Code language: SQL (Structured Query Language) (sql)请注意,本站的在线练习环境不支持 DATEDIFF 函数。
MySQL 中的 DATEDIFF 函数 #
与 SQL Server 不同,MySQL 中的 DATEDIFF() 函数语法略有不同:
DATEDIFF(end_date, start_date)Code language: SQL (Structured Query Language) (sql)MySQL 仅返回两个日期之间的天数差。它在计算中会忽略日期的时间部分。
例如:
SELECT DATEDIFF('2018-08-18', '2018-08-09') days;Code language: SQL (Structured Query Language) (sql)差值为九天。
days
-----
9Code language: SQL (Structured Query Language) (sql)摘要 #
- 使用 SQL
DATEDIFF()函数计算两个日期之间的差值。