mysql 身份证算年龄

场景:没有冗余年龄字段的情况下,列表查询通过身份证计算联络(如果有冗余年龄字段,需要单独创建定时任务,更新数据库年龄字段,增加了复杂度,容易出现问题,且不容易理解)

问题:18位数身份证和15位身份证却别

知识点

  1. 差函数TIMESTAMPDIFF.
  2. case when.
// hit_count 可能出现未初始化的情况
TIMESTAMPDIFF(
        YEAR,
        CASE LENGTH(id_number)
          WHEN 18 THEN
            cast(substring(id_number, 7, 8) AS DATE)
          ELSE
            cast(substring(id_number, 7, 6) AS DATE) END,
        CURDATE()
    )
// hit_count 可能出现未初始化的情况
SELECT
		t1.id,
		t1.name,
		t1.id_number,
		t1.sex,
		t1.birthday,
		t1.nation,
		TIMESTAMPDIFF(
		YEAR,
		CASE LENGTH(t1.id_number)
		WHEN 18 THEN
		cast(substring(t1.id_number, 7, 8) AS DATE)
		ELSE
		cast(substring(t1.id_number, 7, 6) AS DATE) END,
		CURDATE()
		) as age
		FROM app_party_develop t1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值