年龄计算器

Age Calculations

我正在尝试根据 monthly 数据为 people 计算 ages,因此它们的 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

关于您的第一个问题,您可能想问的是:

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

与其取绝对值或零,不如在负日期上加上 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

上述任一解决方案和任何其他 returns 未来出生日期为零的解决方案都不需要绝对值。