Использование оператора Case в предложении Where ___ Использование диапазонов дат с BETWEEN - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь отфильтровать дату по заданному диапазону c в зависимости от того, прошли ли мы первый день недели текущего месяца.

Oracle, похоже, не нравится то, что я использую BETWEEN.

WHEN   
TO_DATE(myDate,'YYYYMMDD')=CASE WHEN TO_DATE(SYSDATE-1) - TO_DATE(last_day(add_months(sysdate, -1))+6)>0 
THEN  
TO_DATE(last_day(add_months(sysdate, -1))+1, 'YYYYMMDD') --AND to_date(TRUNC(SYSDATE) - 1, 'YYYYMMDD')
Else   
TO_DATE(last_day(add_months(sysdate, -2))+1, 'YYYYMMDD') --AND to_date(TRUNC(SYSDATE) - 1, 'YYYYMMDD')
END

Пожалуйста, дайте мне знать, как это исправить.

1 Ответ

2 голосов
/ 21 марта 2020

Если вы хотите, чтобы даты равнялись первому понедельнику текущего месяца или после него, вы можете сделать следующее:

to_date(my_date, 'YYYYMMDD') >= next_day(trunc(sysdate, 'MM') - 1, 'MONDAY')

trunc(sysdate, 'MM') - 1 - последний день предыдущего месяца. Затем next_day(..., 'MONDAY') дает следующий понедельник.

Вы можете изменить название дня в соответствии с тем, как вы определяете день недели . Кроме того, стоит отметить, что название дня (второй аргумент next_day() должен быть указан на языке вашего сеанса.

...