我正在尝试使用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
答案 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
上述任何一种解决方案都不需要绝对值,也不需要为将来出生日期归零的任何其他解决方案提供绝对值。