在Postgresql中获取两个日期之间的工作日
To get weekday between two date in Postgresql
我需要获取给定时间间隔内的所有工作日。
在postgresql中,有dow
和isodow
将它们混合在一起,我可以编写一个函数来检索工作日吗?
据我了解,您需要提取两个日期之间的所有星期一..星期五。这是一个插图,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;
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
- Returns 工作日的名称
- Returns工作日的编号(周一=1,周日=7)
- 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
我需要获取给定时间间隔内的所有工作日。
在postgresql中,有dow
和isodow
将它们混合在一起,我可以编写一个函数来检索工作日吗?
据我了解,您需要提取两个日期之间的所有星期一..星期五。这是一个插图,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;
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
- Returns 工作日的名称
- Returns工作日的编号(周一=1,周日=7)
- 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