下周在甲骨文
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 周,这可能是您要查找的内容。如果您的一周从星期日开始,则两个日期都加一。
我正在使用 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 周,这可能是您要查找的内容。如果您的一周从星期日开始,则两个日期都加一。