重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
SQL语句如下:
创新新互联,凭借10余年的成都做网站、网站制作经验,本着真心·诚心服务的企业理念服务于成都中小企业设计网站有上1000+案例。做网站建设,选创新互联。
select floor(MONTHS_BETWEEN(sysdate,date'2016-1-1')/12) as age from dual;
结果:
select floor(months_between(to_date(concat(extract(year from sysdate),'-10-31'),'YYYY-MM-DD'),to_date(生日的日期,'yyyy-mm-dd'))/12) from table_name
floor 向下取整
months_between 日期相差的月份数
concat字字符串连接
extract(year from sysdate) 返回当前日期的年份
肯定的,你的子查询写,要么是写多了,要么是写少了。
写多了,可以不用写子查询的
(select
(to_char(sysdate,'YYYY')-to_char(c.birthdate,
'YYYY'))
age
from
C
c)年龄,
改为
to_char(sysdate,'YYYY')-to_char(c.birthdate,
'YYYY')
年龄即可
写少了.(先确定id在c表中没有重复啊。)
from中去掉c
,然后在
(select
(to_char(sysdate,'YYYY')-to_char(c.birthdate,
'YYYY'))
age
from
C
c)年龄,
改为
(select
(to_char(sysdate,'YYYY')-to_char(c.birthdate,
'YYYY'))
age
from
C
c
where
c.id=a.id)年龄,
年龄段统计可用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;
统计结果: