摘要:在本教程中,您將學習如何使用 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()函式計算兩個日期之間的差值。