oracle 年龄段统计

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 年龄段统计相关的知识,希望对你有一定的参考价值。

查看年龄在14和18岁之间的人员信息 select * from postulantinformation where birthday between 'to_number(to_char(sysdate,'yyyy')-18)' and 'to_number(to_char(sysdate,'yyyy')-14)' 为什么会提示missing keyword

年龄段统计可用case when 语句。

如test表中有以下数据:

其中18-29岁为青年,30-49岁为中年,50岁以上为老年,先统计各个年龄段人数,可用如下语句:

select case when age between 18 and 29 then \'青年\' when age between 30 and 59 then \'中年\' when age>=60 then \'老年\' end as 年龄段,
count(*) as 人数 
from test
group by case when age between 18 and 29 then \'青年\' when age between 30 and 59 then \'中年\' when age>=60 then \'老年\' end;

统计结果:

参考技术A

结合前几位大佬的答案:

先查出所有数据

select a.*,rowid from RELEASED a

下面是先计算年龄,然后按照年龄分组:

SELECT case when age between 18 and 25 then '青年' when age between 26 and 59 then '中年' when age>=60 then '老年' end as 年龄段,
count(*) as 人数
from (SELECT floor(months_between(sysdate,RELEASED.SPRP_BIRTH_DATE) / 12 ) AGE--对月份向下取整,表示年龄
FROM RELEASED)
group by case when age between 18 and 25 then '青年' when age between 26 and 59 then '中年' when age>=60 then '老年' end
ORDER BY 人数  DESC;

参考技术B 试试这个:
select * from postulantinformation where birthday between
to_number(to_char(add_months(sysdate,-216),'YYYY'))
and
to_number(to_char(add_months(sysdate,-168),'YYYY'))

你birthday那个字段是什么类型的,为什么你to_number外边还有单引号。。。本回答被提问者采纳
参考技术C select * from postulantinformation where birthday between to_number(to_char(sysdate,'yyyy')-18)
and to_number(to_char(sysdate,'yyyy')-14)
参考技术D 应该是这样的:select * from postulantinformation where birthday between to_number(to_char(sysdate,'yyyy'))-18 and to_number(to_char(sysdate,'yyyy'))-14;

如果年龄列基于oracle中的出生日期列为空,如何更新年龄列?

【中文标题】如果年龄列基于oracle中的出生日期列为空,如何更新年龄列?【英文标题】:How to update the age column if age column is null based on date of birth column in oracle? 【发布时间】:2013-07-04 10:28:19 【问题描述】:

如果根据oracle中的出生日期列年龄列为空,如何更新年龄列? 表 t1:(源表)

姓名出生年龄 1985 年 6 月 12 日 bbb 1991 年 5 月 15 日 ccc 2000 年 8 月 23 日

这样的目标表:

姓名出生年龄 1985 年 6 月 12 日 28 bbb 1991 年 5 月 15 日 22 ccc 2000 年 8 月 23 日 13

【问题讨论】:

如果您输入出生日期,那么您是否需要明确输入年龄。? 明年你要增加所有年龄记录吗?更好地创建一个计算字段,根据出生日期和当前日期返回年龄 我和我的朋友在这里 - 你需要创建一个视图。 Calculating age from birthday with oracle plsql trigger and insert the age in table的可能重复 其实也有需要计算AGE的情况。关键是 AGE 是该人在创建记录时或记录所代表的事件发生时的年龄,而不是他们现在的年龄。您不希望即时计算年龄来满足“40 岁以下心脏病发作的每个人”的查询。 【参考方案1】:
update the_table
  set age = months_between(current_date, dob) / 12
where age is null;

【讨论】:

【参考方案2】:
UPDATE table
   SET age =trunc(months_between(sysdate,dob)/12)
 WHERE age is null; 

【讨论】:

【参考方案3】:

你可以试试这个吗?

UPDATE <your table> SET age = NVL(age, MONTHS_BETWEEN(sysdate,dob)/12)

【讨论】:

【参考方案4】:

我绝对赞成这应该是一个基于出生日期的计算字段,因为您必须不断更新它。

如果你需要这样做,我建议:

UPDATE [YOUR TABLE]
SET age = NVL(age, 24 * (sysdate - dob)/8766)

这将通过使用小时来考虑闰年:8766/24 = 365.25

Info on NVL function for substituting null values

【讨论】:

以上是关于oracle 年龄段统计的主要内容,如果未能解决你的问题,请参考以下文章

oracle根据出生日期算年龄

Oracle-分组统计查询

SQL语句按年龄分组,统计各个年龄的人数

算法入门统计各个年龄阶段的人数

统计年龄分布情况(5岁的间隔统计),绘制出年龄分布图。

oracle 关于年龄计算问题?