2014-10-20 2 views
0

Недавно я пытался выбрать несколько значений на основе условия даты (в разделе where).Условие выходных дней в SQL

пример:

Select A, B, C, D from Table1 
Where D = TO_DATE(TO_CHAR(sysdate-1, 'MM/DD/YYYY'), 'MM/DD/YYYY') 

Однако существует проблема, что наш процесс работает по будням. Таким образом, запрос выше, если он является понедельником, поскольку он проверяет на sysdate -1 (то есть в воскресенье) вместо пятницы. Кроме того, запрос не удастся в праздничные дни (например, праздничный день независимости).

Как я могу изменить свой запрос, чтобы справиться с этой ситуацией. Любая помощь.. ?

+0

Как это происходит в праздничные дни? –

+0

Кроме того, какие СУБД вы используете? –

+0

Вам нужна таблица календаря, которая указывает действительные рабочие дни для вашей организации. –

ответ

0

dbms может сообщить вам будний день, но он не знает ваших местных праздников. Итак, ваш единственный вариант - иметь таблицу с действительными датами и использовать ее (выбрав максимальную допустимую дату перед sysdate).

EDIT: Вот как бороться с будням:

TO_CHAR Oracle может дать вам номер дня, но начинается ли этот отсчет с воскресенья или понедельника зависит от настроек, поэтому один лучше не использует это. Но функция также может дать вам название дня для вашего языка, поэтому вы можете использовать его:

CASE to_char(sysdate, 'DY', 'NLS_DATE_LANGUAGE=AMERICAN') 
    WHEN 'MON' THEN trunc(sysdate) - 3 
    WHEN 'SUN' THEN trunc(sysdate) - 2 
    ELSE   trunc(sysdate) - 1 
END as weekday_before 
+0

, и если я ищу условия для выходных - есть ли способ включить sydate-1 (будние дни, кроме понедельника) и sysdate-3 (по понедельникам), оба? – zerosleep

+0

См. Мой отредактированный ответ для этого. –

+0

Спасибо большое! .. Но это будет работать в условии WHERE ... SInce Мне нужно извлечь значение из таблицы на основе этой даты .. и, следовательно, это условие даты должно быть в WHERE. – zerosleep

Смежные вопросы