年龄计算

时间:2015-08-18 13:17:44

标签: oracle floor to-date

我正在尝试使用ages数据来计算people monthly,因此他们的birth date将反映给定月份中的整数。
但是我有几行为我提供了negative年龄。

这个公式中是否有任何方法可以使它成为1。 Absolute价值?     
2。 Birth date大于给我0的年份?

floor(months_between(to_date('31-JAN-14','DD-MON-YY'),DATE_OF_BIRTH )/12) as AGE

2 个答案:

答案 0 :(得分:1)

关于你的第一个问题,也许你是在这之后:

floor(abs(months_between(to_date('31-JAN-14','DD-MON-YY'),DATE_OF_BIRTH )/12)) as AGE

我不确定上述内容是否也回答了您的第二个问题,或者您是否正在处理案例陈述,例如:

case when date_of_birth > p_some_year then 0
     else floor(abs(months_between(to_date('31-JAN-14','DD-MON-YY'),DATE_OF_BIRTH )/12))
end as age

答案 1 :(得分:0)

您可以在负数日期添加100,而不是取绝对值或零:

floor(months_between(to_date('31-JAN-14','DD-MON-YY'),DATE_OF_BIRTH )/12)
+ case when DATE_OF_BIRTH > to_date('31-JAN-14','DD-MON-YY') then 100
       else 0
  end as AGE

如果您确实希望将来的出生日期为零而不是负数或上述解决方案,请使用以下方法:

greatest(0,floor(months_between(to_date('31-JAN-14','DD-MON-YY'),DATE_OF_BIRTH )/12)) as AGE

上述任何一种解决方案都不需要绝对值,也不需要为将来出生日期归零的任何其他解决方案提供绝对值。