Извлечение воскресенья недели

#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 выдает следующую дату, в которую наступает этот день недели.