XiYO

现实不同情弱者,命运不相信眼泪。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

SQL Server自定义字符串处理函数

Posted on 2011-04-11 16:46  XiYO  阅读(579)  评论(0)    收藏  举报

1.字符串分割函数

ALTER   function [dbo].[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

试一试:  select * from split('1,2,3',',')

2.字符串数组长度

 

ALTER     function [dbo].[fnGetStrArrayLength]
(
@str varchar(8000),   --要分割的字符串
@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

试一试:

 declare @length int
 set @length=dbo.fnGetStrArrayLength('1,2,3',',')
 select @length

3.获取字符串数组某个元素的值

 

ALTER  function [dbo].[fnGetStrArrayValue]
(
@str varchar(8000),   --要分割的字符串
@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

试一试:

declare @value varchar(1)
set @value=dbo.fnGetStrArrayValue('1,2,3',',',2)
select @value