簡體   English   中英

如何計算oracle中的工作日(不包括星期幾)?

[英]how to calculate business Day in oracle excluding any specific day of the week?

在我的數據中,我有開始日期和結束日期。 我正在嘗試計算兩天之間的差異。 但是我必須總是排除星期三和星期五。 我仍在嘗試自己尋找解決方案。 如果有人知道該怎么做,請幫忙。 以下是一些可用於實驗的預構建代碼:

SELECT
START_DATE
,END_DATE
,TRUNC(START_DATE, 'D') AS TRUNC_START
,TRUNC(END_DATE, 'D') AS TRUNC_END
,to_char(START_DATE, 'DY') AS START_DAY_NAME
,to_char(END_DATE, 'DY') AS END_DATE_NAME
,TRUNC(END_DATE) - TRUNC(START_DATE) + 1 AS TOTAL_RESOLVE_TIME
,TRUNC((TRUNC(END_DATE) - TRUNC(START_DATE) + 1)/7*2) AS NO_OF_WEEK
FROM
(
 SELECT 
 TO_DATE('2018-03-08', 'YYYY-MM-DD') AS START_DATE 
 ,TO_DATE('2018-03-14', 'YYYY-MM-DD') AS END_DATE 
 FROM dual
 UNION ALL
 SELECT 
 TO_DATE('2018-03-09', 'YYYY-MM-DD') AS START_DATE 
 ,TO_DATE('2018-03-15', 'YYYY-MM-DD') AS END_DATE 
 FROM dual
 UNION ALL
 SELECT 
 TO_DATE('2018-03-02', 'YYYY-MM-DD') AS START_DATE 
 ,TO_DATE('2018-03-11', 'YYYY-MM-DD') AS END_DATE 
 FROM dual
 UNION ALL
SELECT 
 TO_DATE('2018-03-01', 'YYYY-MM-DD') AS START_DATE 
 ,TO_DATE('2018-03-17', 'YYYY-MM-DD') AS END_DATE 
 FROM dual) a; 

閱讀完@wolfrevokcats提到的上述鏈接后,它現在可以工作了,我知道了。

SELECT
START_DATE
,END_DATE
,TRUNC(START_DATE, 'D') AS TRUNC_START
,TRUNC(END_DATE, 'D') AS TRUNC_END
,to_char(START_DATE, 'DY') AS START_DAY_NAME
,to_char(END_DATE, 'DY') AS END_DATE_NAME
-- Find the difference between Resolve and Create Date
,TRUNC(END_DATE) - TRUNC(START_DATE) + 1 AS TOTAL_RESOLVE_TIME 
-- Find the number of Fridays in the whole range
,((next_day(END_date-7,'FRI')-next_day(START_DATE-1,'FRI'))/7)+1 AS NO_OF_FRI
-- Find the number of Wednesday in the whole range
,((next_day(END_date-7,'WED')-next_day(START_DATE-1,'WED'))/7)+1 AS NO_OF_WED
-- Applying the above finding the total business hours
,(TRUNC(END_DATE) - TRUNC(START_DATE) + 1)
 - (((next_day(END_date-7,'FRI')-next_day(START_DATE-1,'FRI'))/7)+1)
 - (((next_day(END_date-7,'WED')-next_day(START_DATE-1,'WED'))/7)+1) AS TOTAL_BUSINESS_HOUR
FROM
(
 SELECT 
 TO_DATE('2018-03-08', 'YYYY-MM-DD') AS START_DATE 
 ,TO_DATE('2018-03-14', 'YYYY-MM-DD') AS END_DATE 
 FROM dual
 UNION ALL
 SELECT 
 TO_DATE('2018-03-09', 'YYYY-MM-DD') AS START_DATE 
,TO_DATE('2018-03-15', 'YYYY-MM-DD') AS END_DATE 
 FROM dual
 UNION ALL
 SELECT 
 TO_DATE('2018-03-02', 'YYYY-MM-DD') AS START_DATE 
 ,TO_DATE('2018-03-11', 'YYYY-MM-DD') AS END_DATE 
 FROM dual
 UNION ALL
  SELECT 
 TO_DATE('2018-03-01', 'YYYY-MM-DD') AS START_DATE 
 ,TO_DATE('2018-03-17', 'YYYY-MM-DD') AS END_DATE 
 FROM dual) a;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM