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



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

在postgresql中,有dowisodow

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

演示:db<gt;小提琴

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

据我所知,您需要提取整个星期一。。两次约会之间的星期五。这是一个以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;

最新更新