SQL Server Datediff()函數

在本教學中,將學習如何使用SQL Server DATEDIFF()函數計算兩個日期之間的年數,月數,周數,天數等。

SQL Server DATEDIFF()函數簡介

要計算年,月,周等兩個日期之間的差值,請使用DATEDIFF()函數,它的語法如下:

DATEDIFF( date_part , start_date , end_date)

DATEDIFF()函數接受三個參數:date_partstart_dateend_date

  • date_part參數是日期的一部分,例如,要在start_dateend_date之間進行比較的年份,季度,月份,周。 請參閱下表中的有效日期部分。
  • start_dateend_date參數是要比較的日期。 必須將它們解析為:DATEDATETIMEDATETIMEOFFSETDATETIME2SMALLATETIMETIME類型的值。

下表列出了date_part的有效值:

date_part 縮寫形式
year yy, yyyy
quarter qq, q
month mm, m
dayofyear dy, y
day dd, d
week wk, ww
hour hh
minute mi, n
second ss, s
millisecond ms
microsecond mcs
nanosecond ns

DATEDIFF()函數返回一個整數值,表示start_dateend_date之間的差異,其中單位由date_part指定。

如果結果超出整數範圍(-2,147,483,648+2,147,483,647),DATEDIFF()函數將返回錯誤。 在這種情況下,應該使用DATEDIFF_BIG()函數。

SQL Server DATEDIFF()函數示例

下麵將舉一些使用DATEDIFF()函數的例子來更好地理解它。

1. DATEDIFF()函數比較兩個日期值之間的差值

此示例使用DATEDIFF()函數比較不同日期部分中兩個日期之間的差值:

DECLARE
    @start_dt DATETIME2= '2020-12-31 23:59:59.9999999',
    @end_dt DATETIME2= '2021-01-01 00:00:00.0000000';

SELECT
    DATEDIFF(year, @start_dt, @end_dt) diff_in_year,
    DATEDIFF(quarter, @start_dt, @end_dt) diff_in_quarter,
    DATEDIFF(month, @start_dt, @end_dt) diff_in_month,
    DATEDIFF(dayofyear, @start_dt, @end_dt) diff_in_dayofyear,
    DATEDIFF(day, @start_dt, @end_dt) diff_in_day,
    DATEDIFF(week, @start_dt, @end_dt) diff_in_week,
    DATEDIFF(hour, @start_dt, @end_dt) diff_in_hour,
    DATEDIFF(minute, @start_dt, @end_dt) diff_in_minute,
    DATEDIFF(second, @start_dt, @end_dt) diff_in_second,
    DATEDIFF(millisecond, @start_dt, @end_dt) diff_in_millisecond;

執行上面查詢語句,得到以下結果:

查詢結果

2. DATEDIFF()函數和表列示例
以下示例使用DATEDIFF()函數將請求的交貨日期與發貨日期(以天為單位)進行比較,返回訂單是否準時或延遲:

SELECT
    order_id,
    required_date,
    shipped_date,
    CASE
        WHEN DATEDIFF(day, required_date, shipped_date) < 0
        THEN 'Late'
        ELSE 'OnTime'
    END shipment
FROM
    sales.orders
WHERE
    shipped_date IS NOT NULL
ORDER BY
    required_date;

執行上面查詢語句,得到以下結果:

查詢結果

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


上一篇: SQL Server日期函數 下一篇: SQL Server字串函數