关闭

sqlserver中拆分字符串问题

1719人阅读 评论(1) 收藏 举报

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

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5440次
    • 积分:97
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:2篇
    • 译文:0篇
    • 评论:1条
    文章存档
    最新评论