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

以前写的,在求年龄时,其实还有些符号需要处理,比如$,可以参考下。同时,我对身份证号没没有去全面的研究,只是能在我们环境中满足需求。 关于函数到底是否可以设默认值,我以前看到有些资料上说不能设置。也许是从别的角度考虑吧,只是这个默认值是真的不彻底,起码存储过程有默认值的参数可以不传值,但函数至少要传个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、付费专栏及课程。

余额充值