2015-11-19 4 views
0

В приведенном ниже описании сохраняется правильный день недели, однако его не работает, если выражение используется в случае case case.Oracle день недели выпуск

Select to_char(SYSDATE,'Day') Dwo, 
     case when to_char(SYSDATE,'Day')='Thursday' 
      then 'BusDay' 
      else 'Non bus day' 
     end 
from DUAL; 

ответ

0
select case when to_char(sysdate,'d')=5 -- (1 = Sunday ... 7 = Saturday) 
      then 'BusDay' 
      else 'Non bus day' 
     end 
from DUAL; 
+1

DAYOFWEEK - это MySQL, а не СУБД Oracle. Однако идея иметь дело с номером дня хороша. Однако TO_CHAR (sysdate, 'd') Oracle, который делает это, полагается на настройку nls_territory сеанса (т. Е. Какой день недели считается первым), поэтому, к сожалению, это будет плохой выбор. –

+0

Вы правы насчет DAYOFWEEK. Я изменился на to_char (sysdate, 'd'). – Christian

+1

Как уже упоминалось: лучше не используйте его; 1 * может * означать воскресенье, но это может быть так же хорошо, как в понедельник, что зависит от настройки территории. –

2

Oracle стремится добавить пробелы в названиях дней. Для предотвращения этого используйте «FMDay» вместо «День».

К слову: Вы полагаетесь на сеанс базы данных, установленный на английский. Лучше прямо указать TO_CHAR, какой язык использовать вместо этого:

to_char(SYSDATE, 'FMDay', 'NLS_DATE_LANGUAGE=american') 
Смежные вопросы