开始使用免费开始使用

日期运算与闰年

您当中有些人可能使用过 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;
编辑并运行代码