用T-SQL处理字符串

    和 T-SQL象数组一样处理字符串 的效果是一样的。由于循环太多,两个都太慢了,不好用。

--GetStrCount 输入一个没有分割的字符串,以及分割符
--返回数组的个数

Create function GetStrCount (@str varchar(8000),@splitstr varchar(100))
--returns varchar(8000)
returns int
as
begin
declare @int_return int
declare @start int
declare @next int

declare @location int

select @next = 0
select @location = 1

if len(@str)<len(@splitstr)
select @int_return =0
if charindex(@splitstr,@str) = 0
select @int_return =0

while (@location<>0)
begin
select @start = @location + 1
select @location = charindex(@splitstr,@str,@start)
select @next = @next + 1
select @int_return = @next

end

return @int_return
end

--GetStrOfIndex 输入一个未分割的字符串,输入分割符号,输入要取得的字符位置
--返回 制定位置的字符串
Create function GetStrOfIndex (@str varchar(8000),@splitstr varchar(4),@index int=0)
returns varchar(8000)
as
begin
declare @str_return varchar(8000)
declare @start int
declare @next int
declare @location int

select @start =1
select @next = 1 --如果习惯从0开始则select @next =0
select @location = charindex(@splitstr,@str,@start)
while (@location <>0 and @index > @next )

begin
select @start = @location +1
select @location = charindex(@splitstr,@str,@start)
select @next =@next +1
end

if @location =0 select @location =len(@str)+1 --如果是因为没有逗号退出,则认为逗号在字符串后
select @str_return = substring(@str,@start,@location -@start) --@start肯定是逗号之后的位置或者就是初始值1
if (@index <> @next ) select @str_return = '' --如果二者不相等,则是因为逗号太少,或者@index小于@next的初始值1。

return @str_return
end

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据