postgresql 如何使用SQL代码识别下一个工作日?

svdrlsy4  于 2022-11-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(129)

如果我将星期日作为非工作日,将星期一作为公共假日,在计算记录创建日期与首次调用记录的时间之间的时间差时,如何排除这些日期。Creation_time、Attempt_time是可用的属性。
假日列表的数据加载到单独的表中。

xriantvc

xriantvc1#

由于这是一个非常常见的需求,您可以定义和使用函数。

create or replace function next_bizday(d date) returns date language sql as
$$
with public_holidays(ph) as 
(
 values
 ('2022-01-01'::date),
 ('2022-03-03'),
 ('2022-05-06'),
 ('2022-05-24'),
 ('2022-09-06'),
 ('2022-09-22'),
 ('2022-12-24'),
 ('2022-12-25')
) -- this CTE is just an illustration of a real public_holidays table

select min(s::date)
from generate_series(d + 1, d + 10, interval '1 day') as s -- look 10 days ahead
where extract('isodow' from s) < 6 -- exclude saturdays and sundays
  and s::date not in (select ph from public_holidays); -- exclude public holidays
$$;

请注意,public_holidays CTE仅用于说明目的。请创建一真实的public_holidays表并使其保持最新。

相关问题