SQL DATEDIFF 函数

摘要:在本教程中,您将学习如何使用 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 是您希望函数返回 startdateenddate 之间差值的单位,例如年、月、日、小时、分钟和秒。
  • 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 表。

SQL ANY - Employees Table

以下查询使用 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() 函数计算两个日期之间的差值。
本教程是否有帮助?
© .