在Postgresql中获取两个日期之间的工作日

To get weekday between two date in Postgresql

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

在postgresql中,有dowisodow

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

据我了解,您需要提取两个日期之间的所有星期一..星期五。这是一个插图,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;

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. Returns 工作日的名称
  2. Returns工作日的编号(周一=1,周日=7)
  3. Returns工作日的编号(周日=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