1. 程式人生 > >sql身份證號計算年齡_函式

sql身份證號計算年齡_函式

成果

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