初学者计算日期之间的天数,不包括周末和假日

时间:2017-02-06 19:59:45

标签: sql postgresql count

我是Postgres的初学者,正在寻找一些有关查询问题的帮助。我想计算两个日期之间的工作日数(不包括sat& sun& holiday)。这就是我想要做的事情:

Select column1, column2, (current_date - defined_date) as elapsed_days
from mytable
where elapsed_days excludes sat, sun, and holidays

1 个答案:

答案 0 :(得分:0)

create table calendar c as
(cal_date date primary key,
 business_day boolean not null);


 insert into calendar
 (select 
  ('01/01/1900'::date + (g||' days')::interval)::date,
 case extract(dow from '01/01/1900'::date 
    + (g||' days')::interval) 
 when 0 then false when 6 then false else true end
 from generate_series(0,365*150) g)

现在你有一个日历表填充了周末设置为" business_day = false"所有其他日子都设置为真。

您必须手动填写其他假期或编写程序来执行此操作。

之后,要计算天数之间的差异,请执行以下操作:

 select count(*) from cal 
 where cal between "start_date_var" and "end_date_var" 
 and business_day=true;

注意:如果是我,我会在您的日历表中添加一些其他列,以便它可以包含它的假期或其他类似的内容。甚至还有另一张假期表。这是一个好的开始。