您当前的位置: 首页 > 数据库教程 > MSSQL教程 > SQL字符串转换为数组

SQL字符串转换为数组

作者:不详 来源:网络 发布时间: 2013-10-08 14:40 点击:
/* 一、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。 -----rtrim(@str)去掉 @str右边的字符 ltrim(@str)去掉左边的字符 ltrim(rtrim(@str))去掉左右空格 -------charindex 在变量@str中@

SQL字符串转换为数组

 /*

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

 

 

 

-----rtrim(@str)去掉 @str右边的字符 ltrim(@str)去掉左边的字符 ltrim(rtrim(@str))去掉左右空格

 

-------charindex  在变量@str中@split的index即索引值

 

 

create function Get_StrArrayLength

(

  @str varchar(5000),  --要分割的字符串

  @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

 

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

 

 

create function Get_StrArrayStrOfIndex

(

  @str varchar(5000),  --要分割的字符串

  @split varchar(10),  --分隔符号

  @index int --取第几个元素

)

returns varchar(5000)

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 

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

end

 

调用示例

 

 

--==================================

declare @str varchar(5000)

set @str='1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48'

print dbo.Get_StrArrayLength(@str,',')

declare @next int 

declare @s varchar(100) 

set @next=1

while @next<=dbo.Get_StrArrayLength(@str,',')

begin

  print dbo.Get_StrArrayStrOfIndex(@str,',',@next) ----输出数组中的值

  set @next=@next+1

end

--==================================

 

 

 

四、检查一个元素是否在数组中

 

 

Create function CheckStrInArr(@s as varchar(50),@sArr as varchar(5000)) returns int

as 

begin

declare @str varchar(5000)

set @str=@sArr

declare @next int  

declare @ret int

set @ret=0

set @next=1

while @next<=dbo.Get_StrArrayLength(@str,',')

begin

   if dbo.Get_StrArrayStrOfIndex(@str,',',@next)=@s 

  begin

  set @ret=1;

  end

   set @next=@next+1

end

return @ret

end

 

-- =========调用失利========

declare @a int

set @a=dbo.CheckStrInArr('8','2,3,5,8')

select @a

-- =========调用失利========

 

五 检查一个元素是否与数组中的相匹配

 

 

--select dbo.CheckStrLikeInArr(2,'d','sde,df,aad,d,fgsa,fgd')

Create function CheckStrLikeInArr

(

@liketype int=0,                      --like类型(0为为@keyword%,2为) 一般只用0

@keyword as varchar(50),      --要检查的关键字

@sArr as varchar(5000)        --数组

returns nvarchar(max)

as 

begin

declare @str varchar(5000)

   set @str=@sArr

declare @start int 

declare @result nvarchar(max)

   set @result=''

   set @start=1

declare @temp nvarchar(20);

while @start<=dbo.Get_StrArrayLength(@str,',')

begin

   if @liketype=0

    begin

     set @temp=dbo.Get_StrArrayStrOfIndex(@str,',',@start);

       if @temp like '%'+ @keyword+'%'

       begin

        set @result=@result+ @temp +',';

       end

      set @start=@start+1

    end

   else if @liketype=1

    begin

 

      if dbo.Get_StrArrayStrOfIndex(@str,',',@start) like ''+ @keyword +'%'

       begin

          set @result=dbo.Get_StrArrayStrOfIndex(@str, ',' , @start)+',';

       end

      set @start=@start+1

     end

   else if @liketype=2

    begin

       

                    if dbo.Get_StrArrayStrOfIndex( @str, ',' , @start) like '%'+ @keyword+''

       begin

           set @result=dbo.Get_StrArrayStrOfIndex(@str, ',' , @start)+',';

       end

      set @start=@start+1

    end

end

return @result

--    return cast(dbo.Get_StrArrayLength(@result,',')as nvarchar(2000)) 

end

 

分享到:
本文"SQL字符串转换为数组"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(2)
100%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4