Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle Sql如何计算出生日期是否在SYSDATE之后的2个月内_Sql_Oracle_Date - Fatal编程技术网

Oracle Sql如何计算出生日期是否在SYSDATE之后的2个月内

Oracle Sql如何计算出生日期是否在SYSDATE之后的2个月内,sql,oracle,date,Sql,Oracle,Date,我需要帮助做一个查询,将返回所有人目前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 数据库中的出生日期格式为1987年11月11日 这并没有返回我需要的正确月份,因为

我需要帮助做一个查询,将返回所有人目前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
数据库中的出生日期格式为1987年11月11日

这并没有返回我需要的正确月份,因为这也是在计算年份,结果是297个月。我以前使用过:

AND abs(to_char(SYSDATE,'MM')-to_char(birth_date,'MM')) = 2`
这显示了正确的结果,但如果当前的
SYSDATE=December
birth\u date=二月
,我不确定这是否有效

如何使用正确的日期计算仅返回当前25岁且其出生日期为系统日期后2个月的人?

尝试:

WHERE months_between(trunc(sysdate,'mm'),trunc(birth_date,'mm'))=310
编辑 将月数从298改为310(计算的是24转25而不是25转26)。

解决方案:

从帐户信息中选择*
WHERE to_char(系统日期,'YYYY')-to_char(出生日期,'YYYY')=25
和to_char(加上_months(TRUNC(SYSDATE),2),'MM')=to_char(出生日期,'MM')


“添加月份”将向当前系统日期月份添加2,并将该值与出生日期进行比较。

您知道是否可以只确定月份而不包括所有年份?我试图简单地把2个月,而不是一个大的数字,如298(这将需要计算这个批代码是连续运行),所以只考虑两个月,不考虑年的数量?把310换成2。但我不明白你的要求。为什么298是一个很大的数字?我感谢你的帮助。Oracle将298作为两个月之间的时间返回,因此我不能简单地将298(或者在您的情况下是310)更改为2。第二个参数
'mm'
不仅提取月份而忽略年份。明白了。试试这个:
mod(to_char(sysdate,'mm')+2,12)=to_char(birth_date,'mm')
我喜欢你的方法。如果系统日期是10月10日,某人的生日是12月12日,会发生什么情况?模((10+2),12)=0。0 != 12在这种情况下。还是Oracle处理日期的方式不同?