ПочатиПочніть безкоштовно

Обчислення дат і високосні роки

Дехто з вас, можливо, має досвід роботи з R, тож зауважимо: обчислення дат для високосних років у R з пакетом lubridate може бути підступним. 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;
Редагувати та запускати код