날짜 계산과 윤년
여러분 중에는 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 (예상치 못한 동작)
SQL Server에서 윤년을 어떻게 처리하는지 DATEADD()와 DATEDIFF() 함수를 사용해 살펴보면서 유사한 특이점이 있는지 확인해 보겠습니다.
이 연습은 강의의 일부입니다
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;