返回
编程
分类

server中要分割就会要用到存储过程哦,复制代码代码如下

日期: 2020-04-29 23:00 浏览次数 : 61

本文章来讲一下关于sql 分割字符串哦,如何进行sql字符串拆分操作了,在mmsql server中要分割就会要用到存储过程哦,其实的sql一般时实现不了的哈。

一,用临时表作为数组 

本文章来讲一下关于sql 分割字符串哦,如何进行sql字符串拆分操作了,在mmsql server中要分割就会要用到存储过程哦,其实的sql一般时实现不了的哈。

复制代码代码如下:

用临时表作为数组

create function f_split(@c varchar(2000),@split varchar(2)) 
returns @t table(col varchar(20)) 
as 
begin 

create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20)) as begin

while(charindex(@split,@c)0) begin insert @t(col) values (substring(@c,1,charindex(@split,@c)-1)) set @c = stuff(@c,1,charindex(@split,@c),'') end insert @t(col) values (@c) return end go

select * from dbo.f_split('dfkd,dfdkdf,dfdkf,dffjk',',')

drop function f_split col -------------------- dfkd dfdkdf dfdkf dffjk

while(charindex(@split,@c)<>0) 
begin 
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1)) 
set @c = stuff(@c,1,charindex(@split,@c),'') 
end 
insert @t(col) values (@c) 
return 
end 
go 

二、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。

select * from dbo.f_split('dfkd,dfdkdf,dfdkf,dffjk',',') 

create function get_strarraylength(@str varchar(1024), --要分割的字符串@split varchar(10) --分隔符号)returns intasbegindeclare @location intdeclare @start intdeclare @length int

set @str=ltrim(rtrim(@str))set @location=charindex(@split,@str)set @length=1while @location0beginset @start=@location+1set @location=charindex(@split,@str,@start)set @length=@length+1endreturn @lengthend调用示例:select dbo.get_strarraylength('78,1,2,3',',')返回值:4

drop function f_split 
col 
-------------------- 
dfkd 
dfdkdf 
必威官网亚洲体育 ,dfdkf 
dffjk 

首页 1 2 末页

(所影响的行数为 4 行) 

二、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。 

复制代码代码如下:

CREATE function Get_StrArrayLength 

@str varchar(1024), --要分割的字符串 
@split varchar(10) --分隔符号 

returns int 
as 
begin 
declare @location int 
declare @start int 
declare @length int 

set @str=ltrim(rtrim(@str)) 
set @location=charindex(@split,@str) 
set @length=1 
while @location<>0 
begin 
set @start=@location+1 
set @location=charindex(@split,@str,@start) 
set @length=@length+1 
end 
return @length 
end 

调用示例:select dbo.Get_StrArrayLength('78,1,2,3',',') 
返回值:4 

三、按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便 

复制代码代码如下:

CREATE function Get_StrArrayStrOfIndex 

@str varchar(1024), --要分割的字符串 
@split varchar(10), --分隔符号 
@index int --取第几个元素 

returns varchar(1024) 
as 
begin 
declare @location int 
declare @start int 
declare @next int 
declare @seed int 

set @str=ltrim(rtrim(@str)) 
set @start=1 
set @next=1 
set @seed=len(@split) 

set @location=charindex(@split,@str) 
while @location<>0 and @index>@next 
begin 
set @start=@location+@seed 
set @location=charindex(@split,@str,@start) 
set @next=@next+1 
end 
server中要分割就会要用到存储过程哦,复制代码代码如下。if @location =0 select @location =len(@str)+1 
--这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。 

return substring(@str,@start,@location-@start) 
end 

调用示例:select dbo.Get_StrArrayStrOfIndex('8,9,4',',',2) 
返回值:9 

三、结合上边两个函数,象数组一样遍历字符串中的元素 

复制代码代码如下:

declare @str varchar(50) 
set @str='1,2,3,4,5' 
declare @next int 
set @next=1 
while @next<=dbo.Get_StrArrayLength(@str,',') 
begin 
print dbo.Get_StrArrayStrOfIndex(@str,',',@next) 
set @next=@next+1 
end 

调用结果: 




5