ITPub博客

首页 > 数据库 > Oracle > SQL使用substring分割字符串的新经验

SQL使用substring分割字符串的新经验

Oracle 作者:sunshuid 时间:2013-12-05 15:26:00 0 删除 编辑

最近工作中遇到一个问题,就是将人名和身份证字符串进行分割,并且还要一一对应,看下列需求示例:  

         NAME:张三、李四、王五  IDCARD:4400001、4400002、4400003

处理要求:            NAME        IDCARD

                      张三        4400001

                      李四        4400002

                      王五        4400003

人名跟身份证是有、号分割,并且不是固定3个人为一组,可能有十多个人拼凑在一起,怎么办?后来经过一些调试和试验,终于找到能解决的办法,由于我不喜欢写函数和存储过程,解决办法以SQL查询脚本呈现,如有需要写成存储过程或函数的朋友可以联系本人。

解决办法

Declare @str varchar(8000)--人名的字符串

Declare @sfzstr varchar(8000)--身份证的字符串

Declare @spli varchar(10)--字符串分隔符

Declare @i int,@splen int,@ncount int ,@scount int    --定义变量

Declare @name table(ID Int IDENTITY (1, 1),NAME varchar(8000))   

Declare @sfz table(ID Int IDENTITY (1, 1),IDCARD varchar(8000))

set @str='张三、李四、王五'

set @sfzstr='4400001、4400002、4400003'

set @spli='、'  --设置分割符号

set @ncount=0

set @scount=0

--分割权属人

select @splen=len(@spli),@i=charindex(@spli,@str)  

while @i>0

begin

insert into @name values(left(@str,@i-1))      --循环截取

select @str=substring(@str,@i+@splen,8000),@i=charindex(@spli,@str)

set @ncount=@ncount+1

end

if @str<>''  insert into @name values(@str) set  @ncount=@ncount+1

--分割身份证

select @splen=len(@spli),@i=charindex(@spli,@sfzstr)

while @i>0

begin

insert into @sfz values(left(@sfzstr,@i-1))  --循环截取

select @sfzstr=substring(@sfzstr,@i+@splen,8000),@i=charindex(@spli,@sfzstr) set @scount=@scount+1

end

if @sfzstr<>'' insert into @sfz values(@sfzstr) set @scount=@scount+1

--------------------------------------------------------------------------------------

if (@ncount>=@scount)  --防止人名或身份证没有对应的项,以‘缺’表示

select a.ID,a.NAME,isnull(b.IDCARD,'缺') from @name a left join @sfz b on a.ID=b.ID

else 

select b.ID,isnull(a.NAME,'缺'),b.IDCARD from @sfz b left join @name a on a.ID=b.ID

执行语句后完美解决上述要求。

注意提示

我在代码增加了一种情况的处理,就是当出现以下情况时:

NAME:张三、李四    IDCARD:4400001、4400002、4400003 

则查询出来为

                      NAME        IDCARD

                      张三        4400001

                      李四        4400002

                      缺          4400003

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23297379/viewspace-1109529/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-02-04