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拆分字符串函数 及应用

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

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

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

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

今天写了个Android登录界面的小程序,要求将用户名和密码在点击保存密码的CheckBox的情况下被保存在文件中。再次打开这个app的时候如果存信息的文件里面有东西就回显在对应的userName和p...

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

我有这样一张表 类似 id name desc ...

关于字符串拆分,合并问题的整理

--关于新方法解决字符串替换和拆分问题的总结 -->TravyLee生成测试数据:[test] if object_id('[test]') is not null drop table [test...

类型转换与字符串拆分

  • 2013-06-25 12:33
  • 3.07MB
  • 下载

字符串按特定字符拆分

  • 2012-05-07 16:51
  • 34KB
  • 下载

sqlserver数据导入mysql五:多线程导数据脚本(读取前面拆分的表名进行数据导入)

#!/usr/bin/perl use Encode; use Encode::CN; use DBI; use Switch; use strict; use Net::HandlerSocket;...

用string拆分字符串

  • 2010-07-02 11:29
  • 47KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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