Oracle CASE на следующий рабочий день - PullRequest
0 голосов
/ 11 января 2019

Я хочу рассчитать следующий рабочий день в запросе Oracle. Таким образом, в понедельник - четверг должно быть sysdate+1, в пятницу - sysdate+3, в субботу - sysdate+2, а в воскресенье - sysdate+1.

Я хочу сделать это динамически, а не иметь множество операторов where, охватывающих разные дни.

where order_date = CASE WHEN (1 + TRUNC (SYSDATE) - TRUNC (SYSDATE, 'IW')) < 5 
  THEN TRUNC (SYSDATE) + 1 
  ELSE TRUNC (SYSDATE + 4), 'IW')  
END

Я нашел это в ответе На следующий рабочий день (понедельник - пятница) в Oracle? , но, похоже, ошибка в запросе, и я не могу ее решить.

Ответы [ 2 ]

0 голосов
/ 11 января 2019

, чтобы получить результаты из отчета, используйте оператор ниже.

where order_date = 
(Select 
CASE WHEN (1 + TRUNC (SYSDATE) - TRUNC (SYSDATE, 'IW')) < 5 
  THEN TRUNC (SYSDATE) + 1 
  ELSE TRUNC ((SYSDATE + 4), 'IW')  
END from dual);
0 голосов
/ 11 января 2019

Вы можете использовать to_char(sysdate, 'fmday'), который возвращает строковое имя дня:

where order_date =  
  case
    when to_char(sysdate, 'fmday', 'nls_date_language=AMERICAN') = 'friday' then trunc(sysdate) + 3
    when to_char(sysdate, 'fmday', 'nls_date_language=AMERICAN') = 'saturday' then trunc(sysdate) + 2
    else trunc(sysdate) + 1
  end 

и лучше:

where order_date = 
  trunc(sysdate) + case
    when to_char(sysdate, 'fmday', 'nls_date_language=AMERICAN') = 'friday' then 3
    when to_char(sysdate, 'fmday', 'nls_date_language=AMERICAN') = 'saturday' then 2
    else 1
  end 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...