#sql #oracle
#sql #Oracle
Вопрос:
Привет, я работаю над извлечением следующего воскресенья недели для любой заданной даты в PL / SQL.
У меня есть следующий код
select TRUNC(to_date('10-07-2016','mm-dd-yyyy'), 'w') 8 - 1/86400
from dual;
Это хорошо работает, когда сама дата не выпадает на воскресенье. Когда я меняю дату на 10/8, что является воскресеньем, результатом будет 10-15-2016, что является следующим воскресеньем, в то время как желаемый результат — 10-08-2016.
Какие-нибудь мысли, ребята?
Комментарии:
1. 15 октября 2016 года — суббота? Вы имели в виду, что вы были после субботы, а не воскресенья, или мы должны считать эти даты днем позже?
Ответ №1:
попробуйте
select TRUNC(to_date('10-09-2016','mm-dd-yyyy'), 'iw') 6 from dual;
'iw'
возвращает первый день недели ISO (понедельник)
Ответ №2:
ВЫБЕРИТЕ NEXT_DAY(TO_DATE(’10-07-2016′, ‘мм-дд-гггг’)-8, ‘SUN’) ИЗ DUAL;
Комментарии:
1. NEXT_DAY дает следующую дату после даты ввода, соответствующей данному дню недели. Вычитание 8 из исходной даты гарантирует, что воскресенье будет принадлежать этой неделе для всех дат.
2. извините, я должен быть более ясен в этом. Я ожидаю воскресенья следующей недели. Допустим, мой ввод равен 10/7, и я ожидаю 10/8, а не 10/2.
3. Удалите часть -8 из кода, и она должна работать нормально. Как я уже сказал, функция NEXT_DAY выдает следующую дату, в которую наступает этот день недели.