Začněte nyníZačněte zdarma

Datová aritmetika a přestupné roky

Někteří z vás možná znají R a balíček lubridate – a víte, že datová aritmetika u přestupných roků v něm může být záludná. lubridate nabízí dva typy funkcí: duration (trvání) a period (perioda).

lubridate::ymd(20120229) - lubridate::dyears(4) --> 2008-03-01, což je špatně.

lubridate::ymd(20120229) - lubridate::dyears(1) --> 2011-03-01, což je správně.

lubridate::ymd(20120229) - lubridate::years(4) --> 2008-02-29, což je správně.

lubridate::ymd(20120229) - lubridate::years(1) --> NA, což je neočekávané chování.

Pomocí funkcí DATEADD() a DATEDIFF() se podíváme, jak se SQL Server vypořádává s přestupnými roky a jestli má podobné zvláštnosti.

Toto cvičení je součástí kurzu

Time Series Analysis in SQL Server

Zobrazit kurz

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

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;
Upravit a spustit kód