sql server 根据身份证号计算出生日期和年龄的存储过程

我这边有一个业务,需要客户填写身份证号,自动计算他的出生日期和年龄

在sql中,具体的存储过程实现是这样的:

/***********************************************
根据身份证号计算出生日期和年龄
Date:2017-10-15
Author:xzl
条件:身份证号码
返回:出生日期和年龄
***********************************************/
/***
*根据身份证号计算出生日期和年龄
***/
create proc [dbo].[sp_GetBirthDate_Age]
    @IDCard varchar(20),
    @BirthDate varchar(20) output,
    @Age int output
as
begin
    --声明变量--
    declare @BirthDateStr varchar(10) 
    declare @YearStr varchar(10)
    declare @MonthStr varchar(10)
    declare @DayStr varchar(10)    
    declare @NowDateStr varchar(20)
    declare @AgeStr varchar(10)
    
    ----1、根据身份证号,计算出生日期---
    --设置IDCard值
    --set @IDCard ='445182199403123781'
    --1)获取身份证号中年月日部分(返回:19940312)--
    set @BirthDateStr = SUBSTRING(@IDCard,7,8)
    --2)将获取年月日字符串转化为对应日期格式--
    --2.1)获取年部分--
    set @YearStr = SUBSTRING(@BirthDateStr,1,4)
    --2.2)获取月部分--
    set @MonthStr = SUBSTRING(@BirthDateStr,5,2)
    --2.3)获取日部分--
    set @DayStr = SUBSTRING(@BirthDateStr,7,2)
    --3)返回组合后的日期---
    set @BirthDate = @YearStr +'-'+@MonthStr+'-'+@DayStr
    
    --2、根据出生日期和当前日期,计算年龄--
    --1)获取当前时间的日期部分(返回:2017-10-15)--
    set @NowDateStr = CONVERT(varchar(10),GETDATE(),23)
    --2)获取当前日期与出生日期的年份(年龄)  返回:23岁 --
    set @AgeStr = DATEDIFF(YEAR,@BirthDate,@NowDateStr)    
    --3)判断当前日期与出生日期(是否过生日,未过生日减去1岁)--
    if(SUBSTRING(@BirthDate,6,5) <= SUBSTRING(@NowDateStr,6,5))
       begin 
            --Cast()将字符转化为数字函数        
            set @Age = CAST(@AgeStr as int) 
       end
    else             
      begin
           set @Age = CAST(@AgeStr as int)-1
      end
    --输出计算后的返回结果-- 
    select @BirthDate as 出生日期,@Age as 年龄
end 

在sql中,执行上面可在可编程性-->存储过程中看到创建的存储过程

存储过程的调用:

--测试1:出生日期已过当前日期的---
declare @IDCard varchar(20)
declare @BirthDate varchar(20)
declare @Age int
set @IDCard='445182199410103781'
exec sp_GetBirthDate_Age @IDCard,@BirthDate output,@Age output
--返回结果--
--出生日期:1994-10-10  年龄: 23
--测试2:出生日期未过当前日期的---
declare @IDCard varchar(20)
declare @BirthDate varchar(20)
declare @Age int
set @IDCard='445182199410183781'
exec sp_GetBirthDate_Age @IDCard,@BirthDate output,@Age output
--返回结果--
--出生日期:1994-10-18  年龄: 22

调用后结果:

转载于:https://www.cnblogs.com/xielong/p/7671302.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值