下周在甲骨文

Next week in Oracle

我正在使用 oracle dbms,我在 Employe table 中有一个列 Birthdate。我想编写一个查询,显示下周过生日的员工。 这是正确的吗?

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

这不是 next_day() 的正确用法:该函数 returns day 的下一个实例的日期。例如,要查找下周五的日期:

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

要查找从现在起 7 天生日的员工,您只需稍微调整一下查询:

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

正确的解决方案是

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 格式 returns 包含日期的 ISO 周,这可能是您要查找的内容。如果您的一周从星期日开始,则两个日期都加一。