关于greenplum(postgersql)日期为闰年闰月闰日的处理

近日有个报表端的特殊需求,遇到了闰年闰月闰日的处理,具体如下:

新需求,生成一个新字段预警日期(warndate),要求在原表结束日期(enddate)基础上减一年 

原表(A)主要涉及三个字段:

1、启始日期(startdate)

2、年数(years)

3、结束日期(enddate)

其中:结束日期=启始日期+年数

问题:启始日期含有2月29日的闰日,而年数(years)不固定,导致结束日期(enddate)可能是闰年也可能非闰年,如果直接减一年,当结束日期前一年为闰年时,会少一天。

例如:

闰年年份
启始日期(startdate) 年数(years) 结束日期(enddate)

预警日期

(错误减一年)(warndate)

预警日期

(正确减一年)(warndate)

2020年2月29日 5年 2025年2月28日 2024年2月28日 2024年2月29日

处理方法,在逻辑中首先对启始日期(startdate)进行判断,如果含有闰月闰日(0229),则结束日期(enddate)先加一天,再减一年,最后再减一天即可!

代码如下:

SELECT 
      THEN (CASE WHEN TO_CHAR(STARTDATE,'MMDD')='0229'  
           THEN ENDDATE::timestamp + ('1 day')::interval+ '-1 year'::interval+ '-1         day'::interval --闰月闰日特殊处理
      ELSE ENDDATE::timestamp + '-1 year'::interval END AS WARNDATE

FROM A

你可能感兴趣的:(大数据)