sqlserver中拆分字符串问题

问题描述:有一个字符串,如"a,b,c,d,e,f,g",如何将该字符串中的a,b,c...分别提取出来执行增删改查呢??

熟悉java和.net语言的人应该都知道解决这个问题并不难,在java或.net中都有split()方法,该方法专门用于拆分字符串的,拆分后字符单元放在一个数组中作为返回值,用它便可轻松解决问题.

可现在我们是在SqlServer中,SqlServer中是没有split()方法和数组的.

 

怎么办呢??

 

既然有需求,就一定有解决方案.

记住:microsoft是一家伟大的公司!

只要你想到了,microsoft一定也想到了.

 

在sqlserver中有charIndex()方法、substring()方法和stuff()方法,运用这三个方法便可解决上述问题。

sqlserver中有多种拆分和批量拆分字符串的方案,在这里介绍两种方案

【方案一】

创建临时表一次性执行

 

sqlserver中是没有数组的概念的,因此我们用临时表作为数组

代码如下:

 

--创建一个临时表作为数组
create function f_split(@ids varchar(2000),@split varchar(2))
returns @t_split table(col varchar(20))
as
begin
 --循环找到字符串中第一个','的索引
 while(charindex(@split,@ids)<>0)
 begin
  --将第一个','之前的字符单元插入临时表中
  insert @t_split(col) values(substring(@ids,1,charindex(@split,@ids)-1))
  --将第一个','后面的字符串重新赋给@ids
  set @ids=stuff(@ids,1,charindex(@split,@ids),'')
 end
 --将最后一个字符单元插入表中(已经没有',')
 insert @t_split(col) values(@ids)
 return
end
go

临时表创建好了,可以作为一张表执行增加改查了。

select * from f_split('1,2,3,4,5,6,7',',')
drop function f_split


图片

 

【方案二】

循环提取,分别执行

 

创建一个存储过程

代码如下:

create procedure proc_ModifyBookCategory
@CategoryId int,
@Ids varchar(2000) --要分割的字符串
as

--循环找到字符串中第一个','的索引
 while(charindex(',',@Ids)<>0)
 begin
  declare @id int;

--将字符单元截取出来赋给id,执行SQL语句
  set @id=substring(@ids,1,charindex(',',@Ids)-1)
  update Books set categoryId=@CategoryId where Id=@id

--截取剩余的字符串重新赋给Ids
  set @Ids=stuff(@Ids,1,charindex(',',@Ids),'')
 end

--字符串中没有‘,’了,则最后一个Ids为最后一个字符单元
 update Books set categoryId=@CategoryId where Id=@Ids
go

 
图片

 

 

 

 

 

                                                                                                                                                               点击我试试
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值