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

时间:2023-03-08 20:21:57

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

在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=''
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=''
exec sp_GetBirthDate_Age @IDCard,@BirthDate output,@Age output
--返回结果--
--出生日期:1994-10-18 年龄: 22

调用后结果:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJkAAAClCAIAAADAhsg7AAAI/klEQVR4nO2dv2orORTG9U6TBJJ3Cdk0eoYtQyCQMpVBnYtgCHu38UJqlyGjJaVZgqtw4WKyYG+VTltoZjyekc6c+a85OR/C0ZVlST6/+SR54huJXTuZiUjc3Bgj0nSkm5ubitf+vp5G+iYsjTHMkghL9iUdlsYYZkmE5bfwZW/RYw2t2r78mxWqmCUdMUs6YpZ05Gb5WypmOSE5WAIgmWXIKrKEQTLLkCVqgWSWIYt9SUe8XtIR72PpiD9f0hGzpCNmSUfMko7a/i6aFY7EnEVF7Es6YpZ0xCzpiFnSkfhngho7aIFqet+pZJY+TZJl+GKWKI0VKbzCYimVdqZIFtPAII2L5Wq1Wq1Wy2PN54+jBHQXIEulTZKUkZ4EsxRCAP/skKVSxWFst1up1CgB3QXIstKRkdRR1Iql8KsZy/1+rz+N/jSL152UzNIYY0z+So/jOMuvViub+fr6UkpHkawECaDKM/Pl8SzX67XWOo7jxetOKd2SpRDeT97AU1bhssz4GWOWy6UFud/vldLn5+eVIAFCHfpSab1cLpXS8/mjTbVYZnjgjE+F1sJiOZ8/rtfrOI5Xx7LxsjsLmGUZiZNlZR7JslBn8bpLDKq10nqz2VQH4hhe/rFQwffCTMGxzPJ5Xyql9/u9XZbm80cfywISn+c69OXHx8d2u91ut1qbxetu8Xr4T752LcDgPIpLidBUfemcY7++vpbLZba/gFnCPNrUd7LcbDZHk4fW9m0YJZXScRwDOAvm86Gaqi9ns5nW2oYmW4rsY7YmKaUq51hLyOk54DKHrYmZYxOWxhhjNptNJGUUySiS3ij4gYmpr5ez2ewQF6XtZme/38/nj/rT2HlsNpsB+9gCWmc+X5J/hOVjaSeM7XarP1OWShopjTFSRUrpSHpZHsJB0pdZ3s6r2RqZLUiVLPO+9LEUpR1vJU6ApQWpP4/WiP1+v9lslNaALw/hIOnLbNean1ft9nWWyseyMEk6J89yHd/LkSwzkFqnLKU0Mvr4+JAqqmQp0o1rJaqd36NWwbE8Pz+PIll4zGesfBEvoHXmfXVgVbDURuoo24dvt9v1er1arexu1hsF3HrprBm6L0OWk2Ucx/aOgU0JSxkZGcVxHMkIYCnAD5E+lkAhs8TKyTKS8urqKpLSJssyuVeQrhEN1stsji3wLszAzLKhMJGy5MppgIDumCVe/LtonybJkuXU9FiyfEpY/vHnX5ymng4se71kfv782Wv7o2j4NwX3yCybi1nSEbP0jANxDw9/nw94bZtGCvK9qQbvBTmqcFkC99ad1YB7uT4BjTir1VIzluL4d7qYl1T2mDRif0ydJVzuZNzeqQBL4Noq9O4sqdtj0o79EThLpOcw7QOZuqp8U87GfSwxIwmaZS1OjX1Z6MtXUlflN+UjVyjxmRV4L74ej1q2P8Lc+1Re41k5/pro25fAeODWMMOYMEtknca+xHftFGbv43Nq4RHJO1CWsOd8GJzvGcmynEFG0KeuWAKVkT0mL7c/QmYJF2LKnZdCH770za6FfgsZ/DCYpVt9sMSMoczP6dEGPY7JsvISLr/E2TimkTK5EVmWR4gcQ6AsYeVnoUpUlb4smz7/1MAsfc9O2JcExPfW6YhZ0lG4LHv/lljp/6jSeBxSMOkjlp1cO07tdrtf//5HLPUaMWcM4QrDsRRCjB79blPjDXDjGMIV2JfNE/uSTpqiL5+lkM+txwHG5celuF6k/1xcJbcCLp+8JVn5yd0bvkFx9aN1ZZQvn2XaSBq5rKRxKFuyfH+4aDmAwzg8vny7PbVdpNF8uhan9y/5EJdLbNL3J6LMstSgvj9JXv52e3p2qxtXxvry/eEiDViafZbi4uHdmDbGmJ4vX+7OMjwvd2eXT46SFMPZ5dVZtS+frjOHLa6Kzq5fGeXLTO8PFwlEX0GdGMIVhmMJrpfH0Tw4Q5zcvTlK0qDnMSMvDlf9WpWrfZlTzqKegloxhCsE58tfhxXrYLtSSVJ/XJaVwX1/uBA5E9oVa6z10mpYX+ZSeWtjS7IoZ5kE9mG3AuGpVbmxLwsg88XNohkQS7wv0/R2e1pYsWxJtmFJBFttlPXSAzJ5qtmCGRBLpC9f7s6SaD5di3QiLZRkL8TMsYitaa3KCF8+S+FdJb+ZL/GfL1EsB/98efhwKYQQiT+zwoa7WL7v02ua4n2fbsYxeug7T3w/lk5iX9JJ7Es6KWhf9i0RwFc6un0cUpWwB/ruFmsAMUs6YpZ0xCzpiFnSEbOkI2ZJR8ySjpglHTFLOmKWdMQs6YhZ0hGzpCNmSUfMko6YJR0xSzpilnTELOmIWdIRs6QjZklHzJKODiw5TT0lLAf+CjarDzFLOmKWdMTrJZ3Ef9e5ucL9u84jDmKiYpZ0xCw942hxNhtGovXJMmXxGcO5vtFnmTrL8xV8AhpxVqslPmM413d3LOFyJ+P2TuUzhnN9o1kiPYdpH8jUFZ8xnOsbvH6zOs58oZ3K8nLjzu5qic8Y9owDcbAewAx/TfTtS2A8cGuYYUyYJbJOY1/iu3aKzxhOO0afZVp5jSNZljPICPrEZwynHaNZwoWYcuel0IcvfbNrod9CBj8MZulWHywxYyjzc3q0QY9jsqy8hMsvcTaOaaRMbkSW5REixxAoS1j5WagSVaUvy6bPPzUwS9+zE/YlAfG9dTpilnQULsvev40SwJ977eNxSMGkj1h2cu04teO/0d1FDOEKw7EU/De6W8cQrsC+bJ7Yl3TSFH0Z7hlQfZwx/HJ3ZuvCh+zBvgTOGG4cy5Ysv+UZw0n+x6Xo7Izhb3o228hnDB/A93TG8Hc6M3HcM4Zz3nUfr4rxZU5lF34nX/4a9YzhbOoWVRMsxpflE02BM04xMYQrhOfLXBr+jOFuzjI1xnQN0gTFEu/LNI1wxnBXZ393DtIExRLpy5HPGD5em+G9j9eXpTOGHSWNYghXCNGX9M4Ydp463CCGcAW+79M8IfaxHccQrsD3Y5snvh9LJ7Ev6ST2JZ0UtC/7lgjgKx3dPg6pStgDfXeLNYCYJR0xSzpilnTELOmIWdIRs6QjZklHzJKO/gf9GdpwqDQRnAAAAABJRU5ErkJggg==" alt="" />