我正在尝试创建一个函数,该函数计算两个日期(包括两个日期)之间的工作日(星期一至星期五)的数量。
我想将函数命名为“ weekdays”。如果有人可以为我指明正确的方向(甚至只是如何计算工作日的数量),那将非常感谢!
create or replace function weekdays ()
returns integer as $total$
declare
total integer;
begin
select count (*) into total from weekdays;
return total;
end;
$total$ LANGUAGE plpgsql;
答案 0 :(得分:0)
我将在这里编写伪代码。
Dt1和dt2是2个日期 工作日是一个函数,该函数在星期一返回1,在星期日返回7。所有数据库都具有这样的功能。
Cnt=0
For dd in dt1 .. dt2
If weekday(dd) is 1 .. 5
Cnt++
End if
Next
Return cnt
答案 1 :(得分:0)
您可以使用generate_series()
生成两个日期之间的所有日期,并计算星期几。
create function weekdays(p_start_date date, p_end_date date)
returns integer
as
$$
select count(*)::int
from generate_series(p_start_date, p_end_date, interval '1' day) as t(dt)
where extract(isodow from t.dt) between 1 and 5
$$
language sql;
isodow
返回遵循ISO 8601标准的星期几,其中星期一为1,星期日为7
上面的函数可以这样使用:
select weekdays(date '2019-03-02', date '2019-03-20');