日期运算与闰年
您当中有些人可能使用过 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;