尝试创建一个用于计算工作日(星期一至星期五)数量的函数

时间:2019-03-26 23:46:17

标签: sql postgresql

我正在尝试创建一个函数,该函数计算两个日期(包括两个日期)之间的工作日(星期一至星期五)的数量。

我想将函数命名为“ 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;

2 个答案:

答案 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');