【www.gdgbn.com--php与数据库】

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

用临时表作为数组

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

(所影响的行数为 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
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

调用结果:
1
2
3
4
5
//----------------------------------------------------------------------------------
select f1,f2,f3,left(a,charindex("_",a)-1)
from 表名
order by left(a,charindex("_",a)-1)

本文来源:http://www.gdgbn.com/jiaocheng/27266/