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

猜你喜欢

转载自blog.csdn.net/qq_41613385/article/details/85336168
今日推荐