SQL 根据出生日期值创建年龄范围

问题描述 投票:0回答:2

我想创建一个包含年龄范围的 AGEGROUP 列: “30岁以下” “30 - 40” ‘40 - 50’
“50 - 60” “60 - 70” “70岁以上” 使用表 XSALES.CUSTOMERS 中的当前日期 -BIRTH_DATE 的值

尝试过此操作,但输出显示: “在预期的位置未找到 FROM 关键字”


select *,
  case
    when datediff(now(), BIRTH_DATE) / 365.25 < 30 then 'under 30'
    when datediff(now(), BIRTH_DATE) / 365.25 < 41 then '30 - 40'
    when datediff(now(), BIRTH_DATE) / 365.25 < 51 then '40 - 50'
    when datediff(now(), BIRTH_DATE) / 365.25 < 61 then '50 - 60'
    when datediff(now(), BIRTH_DATE) / 365.25 < 71 then '60 - 70'
    else 'over 70'
  end as AGEGROUP
from XSALES.CUSTOMERS;







sql date grouping
2个回答
0
投票

尝试:

select *, AGEGROUP =
  case
    when datediff(Day, BIRTH_DATE, GetDate()) / 365.25 < 30 then 'under 30'
    when datediff(Day, BIRTH_DATE, GetDate()) / 365.25 < 41 then '30 - 40'
    when datediff(Day, BIRTH_DATE, GetDate()) / 365.25 < 51 then '40 - 50'
    when datediff(Day, BIRTH_DATE, GetDate()) / 365.25 < 61 then '50 - 60'
    when datediff(Day, BIRTH_DATE, GetDate()) / 365.25 < 71 then '60 - 70'
    else 'over 70'
  end 
from XSALES.CUSTOMERS;

0
投票

选择 count(case when DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(),dob)), '%Y') + 0 < 30 then 1 end) as 'under 30', count(case when DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(),dob)), '%Y') + 0 BETWEEN 30 AND 40 then 1 end) as '30 - 40', count(case when DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(),dob)), '%Y') + 0 BETWEEN 40 AND 50 then 1 end) as '40 - 50', count(case when DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(),dob)), '%Y') + 0 BETWEEN 50 AND 60 then 1 end) as '50 - 60', count(case when DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(),dob)), '%Y') + 0 BETWEEN 60 AND 70 then 1 end) as '60 - 70', count(case when DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(),dob)), '%Y') + 0 > 70 then 1 end) as 'Avobe 70'

来自客户

© www.soinside.com 2019 - 2024. All rights reserved.