В этом руководстве вы узнаете, как использовать функцию 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;
Вот что получилось:
![]()
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() для вычисления разницы между двумя значениями дат.


