使用postgresql生成日历

时间:2015-07-24 09:25:08

标签: date calendar postgresql-9.4 weekday

我试图编写以格式显示日历的查询:

周一thues。文。日。至周五饱和周日

本周的第一个值总是星期一。

例如,今天是星期五 - 2015年7月24日,所以我需要的第一个值是20-07-2015和最后一个26-07-2015

到现在为止,我提出了这个问题:

SELECT 
    extract(DOW FROM r.e - s.a) w, 
    r.e  - s.a as dates
FROM generate_series(0,7,1) AS s(a),
     (SELECT CURRENT_DATE e) r
WHERE extract(DOW FROM CURRENT_DATE - s.a) >=1
GROUP BY 1,2;

然后我可以用不同的方式对它进行排序,然后以相同的方式减去星期日。但也许你可以建议一些更优雅的解决方案?

基本上我想找到最接近星期一和最接近星期日的日期。

1 个答案:

答案 0 :(得分:0)

Ok, I've managed it:

WITH monday AS (
  SELECT
      r.e  - s.a as dow
  FROM generate_series(0,6,1) AS s(a),
     (SELECT CURRENT_DATE e) r
  WHERE extract(DOW FROM CURRENT_DATE - s.a) = 1
  ), sunday as (
  SELECT
     r.e  + s.a as dow
  FROM generate_series(0,6,1) AS s(a),
     (SELECT CURRENT_DATE e) r
  WHERE extract(DOW FROM CURRENT_DATE + s.a) = 0
), columns AS(

SELECT n::date
FROM generate_series((select dow from monday), (select dow from sunday), $$1 day$$) n
) SELECT n FROM columns;