2017-07-31 60 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等等。

相關問題