Oracle SQL:年龄计算问题

时间:2016-06-09 18:16:28

标签: sql oracle

我需要将每个年龄段的数据分为以下类别:1-6,6-12,12-18,> 18.

我遇到的问题是当年龄计算为6时,记录没有显示在任何类别中。我希望它在我的逻辑下面应该是6-12。

为避免重复,我将查询编写为: 1-6: age<=5 6-12: age >=6 <=11 12-18:age >=12 <=17 >18:age >=18

为什么我错过了6岁的记录?

编辑: 这是我的年龄计算: (date1-DOB)/365.25 >= 6 (date1-DOB)/ 365.25 <= 11

我也尝试1-6作为&lt; 6,6-12作为&gt; 6&lt; 12和12-18作为>&lt; 12&lt; 18但是在某些情况下,6岁时表现出1-6和6-12。在12-12和12-18中有12个。有没有办法避免这种情况?

2 个答案:

答案 0 :(得分:1)

您可以使用CASE,您可以明确地写出匹配每个范围的条件;例如:

select x, 
       case
        when x >=  1 and x <  6 then '1-6'
        when x >=  6 and x < 12 then '6-12'
        when x >= 12 and x < 18 then '12-18'
        when x >= 18            then '>18'
        else 'not matched'
       end as range
from ( select level / 2 as x from dual connect by level < 20 )

你可以用不同的方式做同样的事情,但我相信这是最具可读性的。

答案 1 :(得分:0)

你总是在范围内没有覆盖范围,例如:

1-6:  age <6          not <=5 and 
6-12: age >=6 <=12    not age >=6 <=11  
12-18:age >=12 <=18   not >=12 <=17 
>18:age >=18