我需要帮助进行查询,该查询将从表中返回结果,其中所有人当前为 25 岁,出生日期为 2 个月(当月的任何时间)。
我目前的查询是:
SELECT * from account_info
where to_char(SYSDATE,'YYYY')-to_char(birth_date,'YYYY') = 25
AND Months_between(TO_DATE(SYSDATE),TO_DATE(birth_date)) = 2
数据库中birth_date的格式为11-NOV-87
这不是返回我需要的正确月份,因为这也是在计算年份,结果是 297 个月。我以前使用过:
AND abs(to_char(SYSDATE,'MM')-to_char(birth_date,'MM')) = 2`
显示了正确的结果,但我不确定如果当前SYSDATE = December
和birth_date = February
,这是否有效.
如何使用正确的日期计算仅返回当前年满 25 岁且其出生日期从 SYSDATE 开始 2 个月的人?
尝试:
WHERE months_between(trunc(sysdate,'mm'),trunc(birth_date,'mm'))=310
编辑将月份计数从 298 更正为 310(它计算的是 24 转 25 而不是 25 转 26)。
解决方案:
SELECT * from account_info
WHERE to_char(SYSDATE,'YYYY')-to_char(birth_date,'YYYY') = 25
AND to_char(add_months(TRUNC(SYSDATE), 2),'MM') = to_char(birth_date,'MM');
add_months会将 2 添加到当前系统日期月份,并将该值与birth_date进行比较。