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岁以上为老年,先统计各个年龄段人数,可用如下语句:
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;
统计结果:
结合前几位大佬的答案:
先查出所有数据
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;
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 年龄段统计的主要内容,如果未能解决你的问题,请参考以下文章