Следующая неделя в Oracle - PullRequest
0 голосов
/ 25 ноября 2018

Я использую oracle dbms и у меня в Employe таблице есть столбец Birthdate.Я хочу написать запрос, который показывает сотрудников, у которых день рождения на следующей неделе.Это правильно?

select name 
from employe 
where  to_char(birthdate,'DD-MM')=to_char(next_day(sysdate,1)+7,'DD-MM');

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Правильным решением будет

SELECT name
FROM employe
WHERE to_char(birthdate
              /* "move" the birthdate to the current year
                 to get a reliable week number */
              + CAST((EXTRACT(year FROM current_date)
                      - EXTRACT(year FROM birthdate)) || '-0'
                     AS INTERVAL YEAR TO MONTH),
              'IW')
    = to_char(current_date + 7, 'IW');

. Формат IW возвращает неделю ISO, содержащую дату, которая, вероятно, является тем, что вы ищете.Если вы начинаете свою неделю в воскресенье, добавьте одну к обеим датам.

0 голосов
/ 25 ноября 2018

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

select next_day(sysdate, 'FRIDAY') from dual;

Чтобы найти сотрудников, чей день рождения составляет семь дней, вам нужно просто немного настроить свой запрос:

select name 
from employe
where to_char(birthdate,'DD-MM') = to_char(sysdate+7,'DD-MM');
...