SQL DATEDIFF

摘要:在本教學中,您將學習如何使用 SQL DATEDIFF() 函數來計算兩個日期之間的差異。

語法

要計算兩個日期之間的差異,您可以使用 DATEDIFF() 函數。以下說明 SQL Server 中 DATEDIFF() 函數的語法

DATEDIFF ( datepart , startdate , enddate )
Code language: SQL (Structured Query Language) (sql)

引數

datepart

datepart 是您希望函數傳回的日期部分。下表說明 SQL Server 中有效的日期部分

有效日期部分縮寫
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

startdate, enddate

startdateenddate 是您要計算差異的日期常值或運算式。

傳回值

DATEDIFF() 函數會傳回一個整數值,其單位由 datepart 引數指定。

範例

以下範例傳回兩個日期之間的年數

SELECT DATEDIFF(year,'2015-01-01','2018-01-01');
Code language: SQL (Structured Query Language) (sql)

以下是結果

3
Code 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          1096
Code language: SQL (Structured Query Language) (sql)

請注意,DATEDIFF() 函數會將閏年納入考量。如結果清楚顯示,由於 2016 年是閏年,因此兩個日期之間的天數差異為 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)

結果是

2
Code 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,因為 DATEDIFF() 函數只會傳回整數。在此情況下,它會截斷分鐘部分,只考慮小時部分。

2
Code language: SQL (Structured Query Language) (sql)

以下範例顯示如何使用 DATEDIFF() 函數來計算員工截至 2018 年 1 月 1 日的服務年資

SELECT first_name,
         last_name,
         DATEDIFF(year, hire_date, '2018-01-01') year_of_services
FROM employees;
Code language: SQL (Structured Query Language) (sql)

MySQL 中的 DATEDIFF

與 SQL Server 不同,MySQL 的 DATEDIFF() 函數語法略有不同

DATEDIFF(startdate,enddate)
Code language: SQL (Structured Query Language) (sql)

MySQL 只會傳回兩個日期之間的天數差異。它會忽略計算中日期的所有時間部分。請參閱以下範例

SELECT DATEDIFF('2018-08-09','2018-08-18');
Code language: SQL (Structured Query Language) (sql)

結果是九天

9
Code language: SQL (Structured Query Language) (sql)

在本教學中,您已學習如何使用 SQL DATEDIFF() 函數來計算兩個日期之間的差異。

這個教學對您有幫助嗎?