【问题标题】:Generate calendar with postgresql使用 postgresql 生成日历
【发布时间】:2026-01-26 12:15:01
【问题描述】:

我正在尝试编写以格式显示日历的查询:

周一。星期二。文。 th。星期五坐。太阳。

本周的第一个值始终是星期一。

例如,今天是星期五 - 24-07-2015,所以我需要第一个值为 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;

然后我可以用 distinct 对其进行排序,然后以同样的方式减去 sunday。但也许您可以提出一些更优雅的解决方案?

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

【问题讨论】:

    标签: date calendar postgresql-9.4 weekday


    【解决方案1】:
    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;
    

    【讨论】: