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() 函式計算兩個日期之間的差值。
本教程是否有幫助?
© .