【问题标题】:To get weekday between two date in Postgresql在 Postgresql 中获取两个日期之间的工作日
【发布时间】:2021-03-12 08:33:39
【问题描述】:

我需要在给定的时间间隔内获取所有工作日。

在postgresql中,有dowisodow

通过将它们混合在一起,我可以编写一个函数来检索工作日吗?

【问题讨论】:

    标签: postgresql weekday


    【解决方案1】:

    据我了解,您需要提取两个日期之间的所有星期一..星期五。这是一个以2020-11-30作为间隔开始,2020-12-12作为间隔结束的插图。

    select d 
     from generate_series('2020-11-30'::date, '2020-12-12'::date, '1 day'::interval) t(d) 
     where extract(isodow from d) between 1 and 5;
    

    【讨论】:

      【解决方案2】:

      demo:db<>fiddle

      SELECT
          generated_date,
          to_char(generated_date, 'Day'),             -- 1
          EXTRACT(isodow FROM generated_date),        -- 2
          EXTRACT(dow FROM generated_date)            -- 3
      FROM
          generate_series('2020-11-01'::date, '2020-11-10'::date, interval '1 day') AS generated_date
      
      1. 返回工作日的名称
      2. 返回工作日的编号(星期一 = 1,星期日 = 7)
      3. 返回工作日的编号(星期日 = 0,星期六 = 6)

      编辑

      如果你想得到没有周末的日子,你可以通过dow/isodow值过滤,例如:

      SELECT
          generated_date::date
      FROM
          generate_series('2020-11-01'::date, '2020-11-10'::date, interval '1 day') AS generated_date
      WHERE 
          EXTRACT(isodow FROM generated_date) < 6
      

      【讨论】:

      • 感谢您的帮助,您能否在代码块中添加 WHERE 语句,使其在问题的上下文中看起来更清晰?
      • 更新的答案和小提琴
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多