sqlserver中拆分字符串问题

原创 2011年01月17日 16:48:00

问题描述:有一个字符串,如"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

 
图片

 

 

 

 

 

                                                                                                                                                               点击我试试

sqlserver字符串拆分(split)方法汇总

--方法0:动态SQL法 declare @s varchar(100),@sql varchar(1000) set @s='1,2,3,4,5,6,7,8,9,10' set @sql='s...

sqlserver字符串拆分(split)方法汇总

--方法0:动态SQL法declare @s varchar(100),@sql varchar(1000) set @s='1,2,3,4,5,6,7,8,9,10' set @sql='sel...

sqlserver字符串拆分(split)方法汇总

--方法0:动态SQL法 declare @s varchar(100),@sql varchar(1000) set @s='1,2,3,4,5,6,7,8,9,10' set @sql='s...
  • killcwd
  • killcwd
  • 2015年12月12日 23:16
  • 195

sqlserver拆分字符串函数 及应用

USE [dataChange] GO /****** Object: UserDefinedFunction [dbo].[f_splitSTR] Script Date: 05/09/20...

sqlserver字符串拆分(split)方法汇总

 http://www.cnblogs.com/aierong/archive/2008/11/19/sqlserver_split.html

sqlserver字符串拆分(split)方法汇总

 --方法0:动态SQL法 declare @s varchar(100),@sql varchar(1000) set @s='1,2,3,4,5,6,7,8,9,10' set @sq...
  • bear_79
  • bear_79
  • 2014年10月16日 15:33
  • 237

sqlserver字符串拆分(split)方法汇总

declare @s varchar(100),@sql varchar(1000) set @s='1,2,3,4,5,6,7,8,9,10,11'  while(charindex(','...

sqlserver字符串拆分(split)方法汇总

--方法0:动态SQL法 declare @s varchar(100),@sql varchar(1000) set @s='1,2,3,4,5,6,7,8,9,10' set @sql='s...
  • linybo
  • linybo
  • 2015年04月16日 11:26
  • 278

关于oracle 拆分字符串加列转行的问题

我有这样一张表 类似 id name desc ...
  • cccccxj
  • cccccxj
  • 2013年12月24日 16:01
  • 906

读写的文件以及拆分字符串的小问题

今天写了个Android登录界面的小程序,要求将用户名和密码在点击保存密码的CheckBox的情况下被保存在文件中。再次打开这个app的时候如果存信息的文件里面有东西就回显在对应的userName和p...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sqlserver中拆分字符串问题
举报原因:
原因补充:

(最多只允许输入30个字)