go
create function [dbo].[Get_birthday]
(
@idcardno nvarchar(50)
)
returns varchar(10)
as
begin
declare @birthday datetime
if (len(@idcardno)=15 or len(@idcardno)=16) and substring(@idcardno,9,2) between 1 and 12 and substring(@idcardno,11,2) between 1 and 31
set @birthday= convert(varchar(10),'19'+substring(@idcardno,7,2)+'-'+substring(@idcardno,9,2)+'-'+substring(@idcardno,11,2),120)
else if len(@idcardno)=18 and substring(@idcardno,7,2)>=19 and substring(@idcardno,11,2) between 1 and 12 and substring(@idcardno,13,2) between 1 and 31
set @birthday= convert(varchar(10),substring(@idcardno,7,4)+'-'+substring(@idcardno,11,2)+'-'+substring(@idcardno,13,2),120)
else
set @birthday=null
return(convert(varchar(10),@birthday,120))
end
--测试示例
select dbo.[Get_birthday]('222222198306043213')
--运行结果
/*
1983-06-04
*/
本文介绍了一个SQL函数,该函数能够从中国身份证号码中提取出生日期信息,并将其转换为标准的日期格式。身份证号码分为15位和18位两种类型,通过检查号码长度及特定位置上的数字来判断其有效性并提取出生年月日。
2421

被折叠的 条评论
为什么被折叠?



