给函数设置默认值,取身份证号的年龄

本文介绍了一个SQL函数,用于从中国身份证号码中提取出生年份并计算年龄。该函数支持15位和18位身份证号格式,并允许指定当前年份。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前写的,在求年龄时,其实还有些符号需要处理,比如$,可以参考下。同时,我对身份证号没没有去全面的研究,只是能在我们环境中满足需求。 关于函数到底是否可以设默认值,我以前看到有些资料上说不能设置。也许是从别的角度考虑吧,只是这个默认值是真的不彻底,起码存储过程有默认值的参数可以不传值,但函数至少要传个default进去。我只是认为默认值是可以设置,但调用时不够理想而已。 

--王红波 /

 


/*
Description:
    Get age from id_card_no
Return:
    age
Demo:
    select dbo.fn_get_age_from_card_no('420621198303064511','2008')
    select dbo.fn_get_age_from_card_no('420621198303064511',default) ---传default
*/

create function [dbo].[fn_get_age_from_card_no]
(
@card_no varchar(50--身份证号
,@year int =2008      --当前年份
)
returns varchar(10
as
begin
declare @r varchar(10)

set @r=
    
@year-left(case when len(@card_no)=15  
                        
then '19'+replace(replace(substring(@card_no,7,6),'.',''),',','')
                       
when len(@card_no)=18 
                        
then replace(replace(substring(@card_no,7,8),'.',''),',','')
                    
else -1 end,4)
    
return (case when @r=@year+1 then 'Unknown' else @r end)
end


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值