2015-06-03 49 views
2

我在Orders表中有一个日期列SLA_Date如何排除SQL中的周末?

我的SLA_Date应该排除周末(星期六&周日)。平日数据应单独显示。

如何在SQL中执行此操作?

+3

你插入到表?查询它?你想要做什么? – Hawk

回答

2

你只需要添加以下过滤

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

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

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'