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

調用后結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM