在给定期间的第一和最后一天创建列表



我必须在特定时期内每个月的每月两列间隔生成一个列表。第一列必须是一个月的第一天,第二列是一个月的最后一天。

示例:
开始日期:2014-01-01
结束日期:2014-06-30

结果应在两列中:

1. 2014-01-01 | 2014-01-31
2. 2014-02-01 | 2014-02-28
3. 2014-03-01 | 2014-03-31
4. 2014-04-01 | 2014-04-30
5. 2014-05-01 | 2014-05-31
6. 2014-06-01 | 2014-06-30

我有两个功能,这些功能从日期开始就获得了第一天。我正在尝试结合两个系列,但没有运气。

select i::date
from generate_series(first_day('2014-01-01')
                    ,first_day('2014-06-30'), '1 month'::interval) i
select i::date
from generate_series(last_day('2014-01-01')
                    ,last_day('2014-06-30'), '1 month'::interval) i

第二个功能在系列中未正确显示最后一天。

基于此答案:

select d::date as start_date,(d + '1 month'::interval - '1 day'::interval )::date end_date
from generate_series('2014-01-01'::date, '2014-06-30'::date, '1 month'::interval) d

添加一个月并每天减去 - 在间隔表达式中:

SELECT d AS mon_first
     , d + interval '1 month - 1 day' AS mon_last
FROM   generate_series(timestamp '2014-01-01'
                     , timestamp '2014-06-30'
                     , interval  '1 month') d;
  • 有关interval输入的手册

进一步阅读("一天结束"与"每月的最后一天"非常相似:

  • 如何结束一天的结束?

关于生成时间序列:

  • 在Postgresql中的两个日期之间生成时间序列

相关内容

  • 没有找到相关文章

最新更新