注册 登录
编程论坛 SQL Server论坛

身份证号码取出生日期

mxdsl2010 发布于 2010-08-16 17:12, 1055 次点击
有一张表a ,
其中包含字段 身份证号码sfzhm ,出生日期csrq
身份证号码有15位,18位,和空白
现要取出生日期csrq 为sfzhm的出生日期
如sfzhm    csrq
130501198001200010               1980-01-20
130501810220001               1981-02-20
若身份证号码值 为空白,则出生日期列空白
6 回复
#2
cnfarer2010-08-17 06:31
字符串处理
#3
aei1352010-08-17 09:57
select case when charindex(convert(varchar(8),csrq,112),sfzhm)>0 then csrq else null end
from table
#4
yuma2010-08-17 12:59
路过~~
#5
qingshuiliu2010-08-17 15:07
一个存储过程,你直接调用就可以了
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
Create PROCEDURE [dbo].[GetBirthDay]
(
    @id varchar(30)

)
AS
BEGIN
declare @birthday varchar(30)
if(len(Rtrim(@id))=18)
begin
set @birthday=substring(@id,7,8)
set @birthday=substring(@birthday,1,4)+'年'+substring(@birthday,5,2)+'月'+substring(@birthday,7,2)+'日'
end
else
begin
set @birthday=substring(@id,7,6)
set @birthday='19'+substring(@birthday,1,2)+'年'+substring(@birthday,3,2)+'月'+substring(@birthday,5,2)+'日'
end
select @birthday
END
#6
老子小哈2010-08-20 12:05
路过看看
#7
tww1248499802010-08-21 09:59
select sfzhm,csrq=
case when len(sfzhm)=18 then convert(varchar(8),substring(sfzhm,7,8),112)
when len(sfzhm)=15 then convert(varchar(8),'19'+substring(sfzhm,7,6),112)
else null
end
from sfz
1