如何基于yyyymmdd格式编写查询计算用户当前年龄
基于yyyymmdd格式出生日期计算当前年龄的SQL查询语句
下面针对主流数据库给出对应的查询语句,自动计算截至今日的用户年龄,无需更新记录:
MySQL/MariaDB
使用STR_TO_DATE将字符串格式的出生日期转为日期类型,再通过TIMESTAMPDIFF直接计算年份差,自动处理生日是否已过的逻辑:
SELECT birth_date, TIMESTAMPDIFF(YEAR, STR_TO_DATE(birth_date, '%Y%m%d'), CURDATE()) AS age FROM your_table;
SQL Server
先通过CONVERT将yyyymmdd格式转为日期(格式码112对应该格式),计算年份差后,判断今年生日是否尚未到来,若未到则减1避免提前算一岁:
SELECT birth_date, DATEDIFF(YEAR, CONVERT(DATE, birth_date, 112), GETDATE()) - CASE WHEN DATEADD(YEAR, DATEDIFF(YEAR, CONVERT(DATE, birth_date, 112), GETDATE()), CONVERT(DATE, birth_date, 112)) > GETDATE() THEN 1 ELSE 0 END AS age FROM your_table;
Oracle
用TO_DATE转换日期格式,通过MONTHS_BETWEEN计算月份差后除以12,再用TRUNC取整得到年龄:
SELECT birth_date, TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE(birth_date, 'YYYYMMDD')) / 12) AS age FROM your_table;
注意事项
- 将语句中的
your_table替换为实际的表名,birth_date替换为存储yyyymmdd格式出生日期的字段名 - 以上语句均会在查询结果中新增
age列,返回截至今日的准确年龄(比如19731026的记录会计算出对应当前日期的正确年龄)
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

