Функция SQL Server DATEDIFF

В этом руководстве вы узнаете, как использовать функцию 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:

дата_часть аббревиатуры
год гг, гггг
четверть кк, к
месяц М-м-м
деньгода ды, у
день дд, д
неделя неделя, неделя
час чч
минута ми, н
второй сс, с
миллисекунда РС
микросекунда мкс
наносекунда нс

Функция DATEDIFF() возвращает целочисленное значение, указывающее разницу между начальной_датой и конечной_датой, причем единица измерения указана параметром date_part.

Функция DATEDIFF() возвращает ошибку, если результат выходит за пределы диапазона для целого числа(от -2 147 483 648 до +2 147 483 647). В этом случае вместо этого следует использовать функцию DATEDIFF_BIG().

Примеры функции SQL Server DATEDIFF()

Давайте рассмотрим несколько примеров использования функции DATEDIFF(), чтобы лучше ее понять.

A) Использование функции DATEDIFF() для сравнения разностей между двумя значениями дат

В этом примере функция DATEDIFF() используется для сравнения разницы между двумя датами в различных частях даты:

DECLARE 
    @start_dt DATETIME2= '2019-12-31 23:59:59.9999999', 
    @end_dt DATETIME2= '2020-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;

Вот что получилось:

Пример функции SQL Server DATEDIFF с переменными

B) Пример использования функции 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 DATEDIFF() для вычисления разницы между двумя значениями дат.

Мирослав С.

Автор статей, ИБ-специалист