日期運算與閏年
你們之中有些人可能用過 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;