2015-06-03 2 views
2

У меня есть столбец даты SLA_Date в таблице Orders.Как исключить выходные дни в 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 2015 до 31st 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' 
Смежные вопросы