You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于不完整SQL数据编写SELECT语句计算人员年龄

带异常值兼容的年龄计算SQL实现

计算逻辑完全匹配提出的规则,默认按「当前公历年 - 完整出生年份」计算周岁,若需要精确到出生日期的年龄计算,补充出生日期字段后调整计算逻辑即可。

核心处理规则

  • 出生年份为4位有效数字时,直接作为标准出生年份使用
  • 出生年份为2位有效数字时,统一前缀补19转为4位年份,例:85转为1985
  • 出生年份为空、格式非法无有效值时,截取ID字段前2位作为年份后两位,同样补19前缀转为4位年份,例:ID前两位为95则对应出生年份1995

代码实现(MySQL版本,其他数据库可按备注调整)

SELECT
  ID,
  `Year of birth`,
  YEAR(CURDATE()) - standard_birth_year AS age
FROM (
  SELECT
    ID,
    `Year of birth`,
    CASE
      -- 匹配4位合法年份直接取值
      WHEN `Year of birth` REGEXP '^[0-9]{4}$' THEN CAST(`Year of birth` AS UNSIGNED)
      -- 匹配2位合法年份补19前缀
      WHEN `Year of birth` REGEXP '^[0-9]{2}$' THEN CAST(CONCAT('19', `Year of birth`) AS UNSIGNED)
      -- 异常值取ID前两位补19前缀
      ELSE CAST(CONCAT('19', LEFT(CAST(ID AS CHAR), 2)) AS UNSIGNED)
    END AS standard_birth_year
  FROM your_table -- 替换为你的实际表名
) AS temp;

注意事项

  1. 跨数据库适配:如果使用PostgreSQL,将正则匹配改为~ '^[0-9]{4}$'格式、当前日期取CURRENT_DATE即可;如果使用SQL Server,用ISNUMERIC()+LEN()函数做格式校验、用GETDATE()取当前日期即可。
  2. 上述逻辑按需求统一将两位年份映射为19XX,如果后续需要兼容2000年后出生的两位年份(比如05对应2005),可以在CASE判断中加阈值分支调整拼接的前缀。
  3. 代码中提前将ID转为字符类型再做截取,避免ID为数值类型时前导0丢失、截取结果错误的问题。

内容的提问来源于stack exchange,提问作者FromSpace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 16:57:20