2017-07-31 70 views
0
SELECT DATE_PART('DAY',"repairClose"-"createdOn")::INTEGER as "noOfDays" 
FROM "mstRecord" 
WHERE "repairClose" is not null 

我试过上面的查询,它返回的结果包括星期日。我希望排除周日的结果。计算工作日(不包括星期日)

+0

什么是您的数据库结构? – yanman1234

+0

@ yanman1234上面提到的列具有带时区的时间戳作为数据类型 – sidoo05

回答

0

尝试使用extract(dow from "column") <> 0

这里有一个例子:

t=# with dates as (select generate_series(now(),now()+'3 weeks'::interval,'1 day'::interval) "repairClose", now() "createdOn") 
select "repairClose"-"createdOn","repairClose"::date, "createdOn"::date 
from dates 
where extract(dow from "repairClose") <> 0; 
?column? | repairClose | createdOn 
----------+-------------+------------ 
00:00:00 | 2017-07-31 | 2017-07-31 
1 day | 2017-08-01 | 2017-07-31 
2 days | 2017-08-02 | 2017-07-31 
3 days | 2017-08-03 | 2017-07-31 
4 days | 2017-08-04 | 2017-07-31 
5 days | 2017-08-05 | 2017-07-31 
7 days | 2017-08-07 | 2017-07-31 
8 days | 2017-08-08 | 2017-07-31 
9 days | 2017-08-09 | 2017-07-31 
10 days | 2017-08-10 | 2017-07-31 
11 days | 2017-08-11 | 2017-07-31 
12 days | 2017-08-12 | 2017-07-31 
14 days | 2017-08-14 | 2017-07-31 
15 days | 2017-08-15 | 2017-07-31 
16 days | 2017-08-16 | 2017-07-31 
17 days | 2017-08-17 | 2017-07-31 
18 days | 2017-08-18 | 2017-07-31 
19 days | 2017-08-19 | 2017-07-31 
21 days | 2017-08-21 | 2017-07-31 
(19 rows) 
0
with gs(d) as (
    select d::date 
    from generate_series (
     (select min("createdOn") from "mstRecord"), 
     (select max("repairClose") from "mstRecord"), 
     '1 day' 
    ) gs (d) 
) 
select (
    select count(*) 
    from gs 
    where 
     "createdOn" <= d and "repairClose" > d 
     and 
     extrat(dow from d) <> 0 
) as "noOfDays" 
from "mstRecord" 
where "repairClose" is not null 
0

选择 (SELECT COUNT(*)AS count_days_no_weekend FROM generate_series( “createdOn” ::日期, “repairClose” :: date,'1 day')d(the_day) where'extractClose'is not null order by“no_of_days”

在postgres中,在EXTRACT()中添加“isodow”选项,其中星期日= 7,星期一= 1,星期二= 2等等。