標籤:sem 變數 ror 2.3 nps pre out 當前日期 alt
我這邊有一個業務,需要客戶填寫社會安全號碼,自動計算他的出生日期和年齡
在sql中,具體的預存程序實現是這樣的:
/***********************************************根據社會安全號碼計算出生日期和年齡Date:2017-10-15Author:xzl條件:社會安全號碼碼返回:出生日期和年齡***********************************************//****根據社會安全號碼計算出生日期和年齡***/create proc [dbo].[sp_GetBirthDate_Age] @IDCard varchar(20), @BirthDate varchar(20) output, @Age int outputasbegin --聲明變數-- 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 intset @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 intset @IDCard=‘445182199410183781‘exec sp_GetBirthDate_Age @IDCard,@BirthDate output,@Age output--返回結果----出生日期:1994-10-18 年齡: 22
調用後結果:
sql server 根據社會安全號碼計算出生日期和年齡的預存程序