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字符串函数