2017-03-04 77 views
0

正如标题所说,我想计算两个日期之间的日期并排除Oracle中的周末(周六和周日),我不知道这个所有,谁能帮助举个例子SQL?想要一个SQL来获取日期在2日期之间,并排除Oracle中的周六和周日

+0

您的意思是你想生成e行在两个给定日期之间的所有日期?此外,这两个日期有多行 - 如row1 - d1到d2,row2 - d3到d4?请张贴一些例子,你会给出什么样的输入和你想要的输出?输入来自哪里?一张桌子?有没有一个ID列或任何其他独特的列? – GurV

+0

可能重复:http://stackoverflow.com/questions/14898357/calculate-business-days-in-oracle-sqlno-functions-or-procedure – Mike

+0

例如,有start_date和end_date,我使用(end_date - start_date)将获得天数,所以如果持续时间包含星期六和星期日,结果应该是(天-2) – user2575502

回答

1

试试这个。根据您的要求更改start_date和end_date。

如果你想平日的数量,使用

WITH test_data AS 
    (
    SELECT TO_DATE('01-JAN-2014','DD-MON-YYYY') AS start_date, 
      TO_DATE('31-DEC-2014','DD-MON-YYYY') AS end_date 
     FROM dual 
), 
all_dates AS 
(SELECT td.start_date, td.end_date, td.start_date + LEVEL-1 as week_day 
     FROM test_data td 
    CONNECT BY td.start_date + LEVEL-1 <= td.end_date) 

    select count(*) from all_dates 
    WHERE to_char(week_day, 'dy', 'nls_date_language=AMERICAN') NOT IN ('sun' , 'sat') 

如果你想显示,SELECT子句中的日期,使用

select week_day from all_dates 

它是如何工作的:

  1. 它开始将1天添加到start_date,直到您达到end_date,通过在Ora中使用connect by/level CLE。
  2. 它除去了saturdaysunday

PS的日子:Refered这个answer

0

关于简化

如何“从EMP选择*,其中 TO_DATE(f_date之间HIREDATE” ('sat','sun')中的to_date(t_date, 'Dd-mm-yyyy')和to_char(hiredate,dy))

相关问题