我试图编写以格式显示日历的查询:
周一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;
然后我可以用不同的方式对它进行排序,然后以相同的方式减去星期日。但也许你可以建议一些更优雅的解决方案?
基本上我想找到最接近星期一和最接近星期日的日期。
答案 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;