如何在SQL查询中计算并返回客户年龄而非出生日期?
在SQL查询中计算客户年龄(替代出生日期)
完全可以直接在SQL查询里实现,不用依赖存储过程。根据你使用的数据库类型,这里提供几种常用的准确计算年龄的方式(能自动处理“未到当年生日”的情况,避免直接取年份差导致的年龄偏大问题):
不同数据库的年龄计算表达式
- SQL Server:
DATEDIFF(year, ac.dob, GETDATE()) - CASE WHEN DATEADD(year, DATEDIFF(year, ac.dob, GETDATE()), ac.dob) > GETDATE() THEN 1 ELSE 0 END AS age - MySQL:
TIMESTAMPDIFF(YEAR, ac.dob, CURDATE()) AS age - PostgreSQL:
EXTRACT(YEAR FROM AGE(CURRENT_DATE, ac.dob)) AS age
修改后的完整查询示例(以SQL Server为例)
把原查询里的ac.dob替换成上面的年龄计算表达式即可:
select ac.first_name, ac.last_name, -- 替换出生日期为计算出的年龄 DATEDIFF(year, ac.dob, GETDATE()) - CASE WHEN DATEADD(year, DATEDIFF(year, ac.dob, GETDATE()), ac.dob) > GETDATE() THEN 1 ELSE 0 END AS age, st.description, co.description, rd.race, rd.ethnicity_description from address ad inner join all_clients_view ac on ad.people_id = ac.people_id inner join county co on ad.county = co.county_id inner join state st on co.state_id = st.state_id inner join rpt_demographics rd on ac.people_id = rd.people_id where ad.is_active = 1 order by st.description, co.description
这样就能直接在查询结果中得到客户的准确年龄,无需额外存储过程。
内容的提问来源于stack exchange,提问作者Lesql
相关产品推荐
相关产品推荐

