sql身份證號計算年齡_函式
阿新 • • 發佈:2018-12-29
成果
CREATE function [dbo].[F_CalculateAge] (@idCard nvarchar(50)) --引數 returns nvarchar(50) --返回值型別 as begin declare @birthday nvarchar(50) --建立變數,在函式體中使用 set @birthday=cast((cast((SUBSTRING(@idCard,7,8)) as date)) as nvarchar(50)) --對變數賦值,把身份證號中的生日截取出來 declare @age nvarchar(50) set @age=CAST((DATEDIFF(YEAR,@birthday,GETDATE())) as nvarchar(50)) --計算年齡 return (@age) --返回值,這裡注意一下,好像要打括號才能把值返回出去 end
方法解析
SUBSTRING(要擷取的物件,x,y)
--x:從哪裡開始擷取,下標好像是從1開始算的
--y:擷取的長度
示例:
print SUBSTRING('429005200101011234',7,8)
輸出值:20010101
DATEDIFF(r,x,y)
--計算兩個日期之間的時間
--r:計算返回的型別,年、月、天等
--x:開始時間
--y:結束時間
--也就是返回 y-x 的值,值的型別由 r 決定
示例:
print DATEDIFF(YEAR,'1998-01-01','2018-12-29')
輸出值:20
測試
新建一張表
CREATE TABLE [dbo].[information]( [ID] [int] IDENTITY(1,1) NOT NULL, [NAME] [nvarchar](50) NOT NULL, [IdCard] [nvarchar](50) NOT NULL, CONSTRAINT [PK_information] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
插入資料
insert into information
values
('李白','429005200101011234'),
('杜甫','429005200201011235'),
('王維','429005200301011236'),
('白居易','429005200401011237')
執行檢視結果
select *,dbo.F_CalculateAge(IdCard)age from information