zoukankan      html  css  js  c++  java
  • 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

    调用后结果:

    平时多记记,到用时才能看看,记录你的进步,分享你的成果
  • 相关阅读:
    Python并发编程-IO模型-IO多路复用实现SocketServer
    Python并发编程-IO模型-非阻塞IO实现SocketServer
    Python并发编程-协程实现socketserver
    Pytho并发编程-利用协程实现简单爬虫
    Python正则表达式中的re.S
    Python-正则表达式
    django-模板初探
    django-response对象
    django-QueryDict 对象
    django-request对象
  • 原文地址:https://www.cnblogs.com/m0488/p/8615474.html
Copyright © 2011-2022 走看看