繁体   English   中英

如何在PostgreSQL中的两个日期之间生成每个月的最后一个日期?

[英]How to generate last date of every month between two dates in PostgreSQL?

我想生成两个日期之间每个月的最后日期列表。 例如,我想生成

2004-01-312005-08-31结果应该是这样的

2004-01-31
2004-02-29
2004-03-31
2004-04-30
2004-05-31
.
.
.
2005-07-31
2005-08-31

谁能帮助我如何做到这一点并在 PostgreSQL 中得到这个结果? 谢谢! 我正在使用 postgreSQL 8.2.15

select to_date('2004-01-31','YYYY-MM-DD') + (dates*interval '1 month')
from generate_series(0,19,1) dates

您可以计算开始日期和结束日期之间的月数,然后构建一个开始日期 + 1 个月的列表,只要没有达到结束日期:

SELECT TO_DATE('2004-01-31','YYYY-MM-DD') + (d*INTERVAL '1 MONTH')
FROM generate_series(0,(SELECT CAST(EXTRACT(YEAR FROM age
(TO_DATE('2005-08-31','YYYY-MM-DD'), TO_DATE('2004-01-31','YYYY-MM-DD'))) * 12 +
EXTRACT(MONTH FROM age(TO_DATE('2005-08-31','YYYY-MM-DD'), 
TO_DATE('2004-01-31','YYYY-MM-DD'))) AS INT)),1) d

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM