在本教學中,將學習如何使用SQL Server DATEDIFF()
函數計算兩個日期之間的年數,月數,周數,天數等。
SQL Server DATEDIFF()函數簡介
要計算年,月,周等兩個日期之間的差值,請使用DATEDIFF()
函數,它的語法如下:
DATEDIFF( date_part , start_date , end_date)
DATEDIFF()
函數接受三個參數:date_part
,start_date
和end_date
。
date_part
參數是日期的一部分,例如,要在start_date
和end_date
之間進行比較的年份,季度,月份,周。 請參閱下表中的有效日期部分。start_date
和end_date
參數是要比較的日期。 必須將它們解析為:DATE,DATETIME
,DATETIMEOFFSET
,DATETIME2,SMALLATETIME
或TIME類型的值。
下表列出了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_date
和end_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字串函數