如何在SQL中排除周末?

时间:2015-06-03 10:18:34

标签: sql oracle datetime date-arithmetic

我在SLA_Date表中有一个日期列Orders

我的SLA_Date应排除周末(周六和周日)。工作日的数据应单独显示。

我如何在SQL中执行此操作?

3 个答案:

答案 0 :(得分:5)

您只需添加以下过滤器

WHERE TO_CHAR(date_column, 'DY','NLS_DATE_LANGUAGE=AMERICAN') NOT IN ('SAT', 'SUN')

您的查询如下:

SELECT SLA_Date
   FROM orders
 WHERE TO_CHAR(SLA_Date, 'DY','NLS_DATE_LANGUAGE=AMERICAN') NOT IN ('SAT', 'SUN')

例如(WITH子句仅用于构建测试用例),以下查询仅显示从1st May 201531st May 2015的工作日(即不包括周六和周日):< / p>

SQL> WITH DATA AS
  2    (SELECT to_date('05/01/2015', 'MM/DD/YYYY') date1,
  3      to_date('05/31/2015', 'MM/DD/YYYY') date2
  4    FROM dual
  5    )
  6  SELECT date1+LEVEL-1 the_date,
  7        TO_CHAR(date1+LEVEL-1, 'DY','NLS_DATE_LANGUAGE=AMERICAN') day
  8  FROM DATA
  9  WHERE TO_CHAR(date1+LEVEL-1, 'DY','NLS_DATE_LANGUAGE=AMERICAN')
 10        NOT IN ('SAT', 'SUN')
 11  CONNECT BY LEVEL <= date2-date1+1;

THE_DATE  DAY
--------- ---
01-MAY-15 FRI
04-MAY-15 MON
05-MAY-15 TUE
06-MAY-15 WED
07-MAY-15 THU
08-MAY-15 FRI
11-MAY-15 MON
12-MAY-15 TUE
13-MAY-15 WED
14-MAY-15 THU
15-MAY-15 FRI
18-MAY-15 MON
19-MAY-15 TUE
20-MAY-15 WED
21-MAY-15 THU
22-MAY-15 FRI
25-MAY-15 MON
26-MAY-15 TUE
27-MAY-15 WED
28-MAY-15 THU
29-MAY-15 FRI

21 rows selected.

SQL>

有关详细示例,请参阅Generate Date, Month Name, Week Number, Day number between two dates

答案 1 :(得分:0)

您可以尝试以下条件来过滤数据:

WHERE case to_char (SLA_Date, 'FmDay', 'nls_date_language=english') <> 'Saturday'
  AND case to_char (SLA_Date, 'FmDay', 'nls_date_language=english') <> 'Sunday'

答案 2 :(得分:-1)

select *
from   orders
where  TRUNC (thing) - TRUNC (thing, 'IW') between 0 and 4;

http://sqlfiddle.com/#!4/db891/1