计算两个日期之间不包括星期日的天数

时间:2015-04-20 02:21:03

标签: sql oracle

我正在尝试计算两个日期(不包括星期日)之间的天数。这是我的查询,

SELECT   F_PLANHM_END_DT
       - F_PLANHM_ST_DT
       -   2
         * (TO_CHAR (F_PLANHM_END_DT, 'WW') - TO_CHAR (F_PLANHM_ST_DT, 'WW'))
  FROM VW_S_CURV_PROC
 WHERE HEAD_MARK = 'IGG-BLH-BM 221';

SELECT COUNT (*)
  FROM (SELECT SYSDATE + l trans_date
          FROM (    SELECT LEVEL - 1 l
                      FROM VW_S_CURV_PROC
                CONNECT BY LEVEL <= ( (SYSDATE + 7) - SYSDATE)))
 WHERE TO_CHAR (trans_date, 'dy') NOT IN ('sun');

我正在从名为VW_S_CURV_PROC的视图中检索日期,其开始日期为:F_PLANHM_ST_DT,结束日期为F_PLANHM_END_DT。不知怎的,我不能让这个工作。请帮帮我......

1 个答案:

答案 0 :(得分:3)

您可以使用 ROW GENERATOR 技术首先生成给定范围的日期,然后排除 SUNDAYs

例如,此查询将为我提供 2014年1月1日至2014年12月31日之间的总天数,不包括星期日 -

SQL> WITH DATA AS
  2    (SELECT to_date('01/01/2014', 'DD/MM/YYYY') date1,
  3      to_date('31/12/2014', 'DD/MM/YYYY') date2
  4    FROM dual
  5    )
  6  SELECT SUM(holiday) holiday_count
  7  FROM
  8    (SELECT
  9      CASE
 10        WHEN TO_CHAR(date1+LEVEL-1, 'DY','NLS_DATE_LANGUAGE=AMERICAN') <> 'SUN'
 11        THEN 1
 12        ELSE 0
 13      END holiday
 14    FROM data
 15      CONNECT BY LEVEL <= date2-date1+1
 16    )
 17  /

HOLIDAY_COUNT
-------------
          313

SQL>