始める無料で始める

日付計算とうるう年

R を使ったことがある方は、lubridate パッケージでのうるう年の日付計算がやっかいだと感じたかもしれません。lubridate には duration 型と period 型の2種類の関数があります。

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;
コードを編集して実行