НачатьНачать бесплатно

Арифметика дат и високосные годы

Если вы работали с R, то знаете, что арифметика дат в високосные годы может быть непростой задачей — особенно при использовании пакета lubridate. В нём есть два типа функций: duration (продолжительность) и period (период).

lubridate::ymd(20120229) - lubridate::dyears(4) --> 2008-03-01 — результат неверный.

lubridate::ymd(20120229) - lubridate::dyears(1) --> 2011-03-01 — результат верный.

lubridate::ymd(20120229) - lubridate::years(4) --> 2008-02-29 — результат верный.

lubridate::ymd(20120229) - lubridate::years(1) --> NA — неожиданное поведение.

С помощью функций DATEADD() и DATEDIFF() можно проверить, как SQL Server обрабатывает високосные годы и есть ли у него подобные особенности.

Это упражнение является частью курса

Анализ временных рядов в SQL Server

Посмотреть курс

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

DECLARE
	@LeapDay DATETIME2(7) = '2012-02-29 18:00:00';

-- Fill in the date parts and intervals as needed
SELECT
	DATEADD(___, ___, @LeapDay) AS PriorDay,
	DATEADD(___, ___, @LeapDay) AS NextDay,
    -- For leap years, we need to move 4 years, not just 1
	DATEADD(YEAR, ___, @LeapDay) AS PriorLeapYear,
	DATEADD(YEAR, ___, @LeapDay) AS NextLeapYear,
	DATEADD(___, -1, @LeapDay) AS PriorYear;
Редактировать и запускать код