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

Posted

技术标签:

【中文标题】计算两个日期之间不包括星期日的天数【英文标题】:Counting the number of days excluding sunday between two dates 【发布时间】:2015-04-20 02:21:02 【问题描述】:

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

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。不知怎的,我不能让它工作。请帮帮我...

【问题讨论】:

这个问题经常被问到。您的问题并不完全重复-尝试通过更改第二个选择以仅删除星期日来修改代码-在此答案中:***.com/questions/12932965/… 嗨,吉姆,感谢您的推荐。所以我尝试了这个,paste.ofcode.org/8qZDAjzwYFR87emy52GEgS 它说 ORA-32033: unsupported column aliasing 我已经在这里回答了一个类似的问题***.com/a/28405901/3989608如果你有一组定义的假期,那么你可以进一步使用它作为回答这里***.com/a/29671333/3989608 @LalitKumarB 你能发些东西让我回答吗?非常感谢拉利特 @KonzMama 好的,请看我的回答。 【参考方案1】:

您可以使用 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>

【讨论】:

以上是关于计算两个日期之间不包括星期日的天数的主要内容,如果未能解决你的问题,请参考以下文章

如何删除两个日期之间的星期六和星期日并计算总天数[重复]

如何计算 Postgres 中两个日期之间除星期日以外的天数?

SQL语句计算两个日期之间有多少个工作日的方法

给定日期范围(开始日期和结束日期),我如何计算天数,不包括 .Net 中指定的星期几?

mysql: 如何计算指定日期到当前日期之间的天数

如何在Javascript中找到两个日期之间的给定天数? [复制]