案例说明:当日期超过当前年份的90年时,则最大日期为当前日期的90年



我有一个日期列,其中包含人们的生日。其中一些包含90多年前的日期,我希望这些日期上限为90年前。

示例

current      desired
1930-01-01   1932-01-01
1930-02-11   1932-02-11

正如你所看到的,如果出生日期自然超过90年,那么理想的状态是从当前日期起90年。

它比我最初猜测的更棘手,而且它可以写得更简单,现在似乎有"是竞争";,尽管这比以前的";

90年以上无日期版本:

SELECT column1 as "current"
,iff(column1 < dateadd('year',-90, CURRENT_DATE), 
date_from_parts(
year(CURRENT_DATE) - 90 + (month(column1)*100+day(column1) < month(CURRENT_DATE)*100 + day(CURRENT_DATE))::int, 
month(column1), 
day(column1)), 
column1
) as desired
FROM VALUES 
('1934-01-01'::date),
('1932-03-28'::date),
('1932-03-20'::date),
('1931-03-28'::date),
('1931-03-20'::date),
('1930-01-01'::date),
('1930-02-11'::date);
当前所需
1934-01-011934-01-01
1932-03-281932-03-28
1932-03-201933-03-20
1931-03-281932-03-28
1931-03-201933-03-20
1930-01-011933-01-01
1930-02-111933-02-11

这确实是一个棘手的问题。我甚至在timeanddate.com上查看了最长90年的日期差异-看起来不错。如果有人发现这方面的问题,请感谢反馈。

select iff(extract(year,dateadd('year',90,column1::date))>extract(year,'2022-02-28'::date),
column1,
dateadd(day,
datediff(day,column1::date,dateadd(year,-90,'2022-02-28'::date)),
column1::date
)) as test
from
values
('1932-02-29'::date)
,('1932-02-28'::date)
,('1932-03-01'::date)
,('1928-02-29'::date)
,('1924-02-29'::date)
,('1930-01-01'::date)
,('1940-05-01'::date)
,('1950-12-01'::date)
,('1980-10-01'::date)
,('1920-06-01'::date)
;

+------------+
| TEST       |
|------------|
| 1932-02-28 |
| 1932-02-28 |
| 1932-02-28 |
| 1932-02-28 |
| 1932-02-28 |
| 1932-02-28 |
| 1940-05-01 |
| 1950-12-01 |
| 1980-10-01 |
| 1932-02-28 |
+------------+

相关内容

  • 没有找到相关文章

最新更新