Найти пятницу после следующего в Oracle - PullRequest
3 голосов
/ 14 марта 2019

У меня странная ситуация, когда мне нужно сделать DueDate на следующую пятницу.

Итак, если дата - понедельник, 11 марта 2019 года, тогда срок оплаты - пятница, 22 марта.

Я могу легко это сделать с помощью:

TRUNC(Next_Day(FilingPeriod, 'FRI')) + 7 as DueDate

Моя проблеманаступает, когда днем ​​является пятница 15 марта 2019 года, и у него также должен быть срок платежа в пятницу 22 марта, вместо этого он должен иметь срок платежа в пятницу 29 марта.

И я понимаю, почему.Я искал способ упростить это или добавить чек, чтобы определить, является ли текущая дата пятницей, и перейти оттуда.

Я немного искал и читал похожие вопросы, но все еще не могу его найти.Спасибо за любую помощь

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Вернитесь в понедельник, первый день недели ISO. Тогда иди плюс 4, потом плюс 7 дней:

TRUNC(FilingPeriod, 'iw') + 11

На заметку: я бы избегал NEXT_DAY когда бы ни было возможно. Название дня зависит от текущей настройки языка, и NEXT_DAY не имеет параметра, который мог бы это переопределить Это делает функцию довольно опасной, потому что она делает запрос подверженным сбоям.

2 голосов
/ 14 марта 2019

Просто вычтите 1 из даты перед использованием NEXT_DAY():

TRUNC(Next_Day(FilingPeriod - 1, 'FRI')) + 7 as DueDate
...