在数据库中,以往在C#中简单的操作,都变得麻烦了,要很多函数来帮助。一下就是切割字符串的函数,比较有用。(SQLServer用)
一、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。
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
三、结合上边两个函数,象数组一样遍历字符串中的元素
create function f_splitstr(@SourceSql varchar(8000),@StrSeprate varchar(100))
returns @temp table(F1 varchar(100))
as
begin
declare @ch as varchar(100)
set @SourceSql=@SourceSql+@StrSeprate
while(@SourceSql<>”)
begin
set @ch=left(@SourceSql,charindex(‘,’,@SourceSql,1)-1)
insert @temp values(@ch)
set @SourceSql=stuff(@SourceSql,1,charindex(‘,’,@SourceSql,1),”)
end
return
end
—-调用
select * from dbo.f_splitstr(‘1,2,3,4′,’,’)
–结果:
1
2
3
4
select charindex(‘,’,’1,2,3,4,5′,1)
//索引 , 的位置,结果是 整数2
select left(‘1,2,3,4,5’,1)
//从左边开始断掉下标为1的值,结果是把 值的1 与后面的值断开,结果是 1
select stuff(‘1,2,3,4,5’,1,charindex(‘,’,’1,2,3,4,5′,1),”)
//stuff是从 1 开始与后面的用charindex索引得到的值(这里为2)即下标的值断开,把它变成 ” 这个是空的意思。
//使用stuff后的结果是 2,3,4,5
//顺便说下struff的用法,第一个参数不用说,要被执行的值,第二个参数是要删除字符的起始位置,第三个参数并不是要删除到哪个字符,而是要删除从第二个参数开始要删除几个字符,要删除几个字符,这句话很重要,别误解了,这里是现实要删除2个字符(即把 1, 删除),然后将第四个参数添加进来,即把第三个参数获得的东西与第四个参数的值进行替换