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
时间: 2024-10-21 16:07:53

SQL字符串转换为数组的相关文章

SQL处理数组,字符串转换为数组

原文转载自:http://hi.baidu.com/gagahjt/item/fd081316450f05028ebde413 一.按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果. rtrim(@str)去掉 @str右边的字符 ltrim(@str)去掉左边的字符 ltrim(rtrim(@str))去掉左右空格 charindex  在变量@str中@split的index即索引值 create function Get_

【Java面试题】17 如何把一个逗号分隔的字符串转换为数组? 关于String类中split方法的使用,超级详细!!!

split 方法:将一个字符串分割为子字符串,然后将结果作为字符串数组返回. stringObj.split([separator],[limit])参数:stringObj   必选项.要被分解的 String 对象或文字.该对象不会被 split 方法修改.separator 可选项.字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符.如果忽 略该选项,返回包含整个字符串的单一元素数组. limit可选项.该值用来限制返回数组中的元素个数. 说明:split 方法的结果

eval()将json 字符串转换为数组

json ={ GW:[{id:"655",mc:"董事"},{id:"656",mc:"书记"},{id:"804",mc:"经理"},{id:"818",mc:"财务总监"},{id:"820",mc:"助理"}], GZ:[{id:"1",mc:"电工"},{id

将字符串转换为数组

方法一: 1 $str = "abcd" 2 $s2 = $str.GetEnumerator() #$s2是无法使用下标的方式进行索引的,因为其不是array 3 $s2 | % {$_ + "y8y"} 1 $str = "abcd" 2 Foreach ($s in $str.GetEnumerator()) {$s + "y8y"} 方法二: 1 $str = "abcd" 2 $str.tocha

将字符串类型的数组转换为数组类型数组

/** * 将字符串转换为数组 * * @param    string    $data    字符串 * @return    array    返回数组格式,如果,data为空,则返回空数组 */ function string2array($data) { if($data == '') return array(); @eval("\$array = $data;"); return $array; }

js实现字符串和数组相互转换

<div class="aa"></div> <script> //字符串转换为数组 var Str="abc-mng-zhang-mayi"; var newArray=Str.split("-"); $(".aa").text("abc-mng-zhang-mayi 转换 newArray[0]:"+newArray[0]); </script> <

javascript中字符串和数组的相互转换

javascript中字符串和数组的相互转换:字符串和数组的相互转换操作是非常的重要的,因为在实际编码过程中会经常用到,所以这是必须要掌握的知识点,当然这个知识点并不难,知道了就永远知道了,并不是那种需要充分实践才能够掌握的东西,下面就做一下简单的介绍.一.字符串转换为数组:此操作会用到split()函数,它能够以指定的字符作为分隔符,将字符串转换成一个数组,实例代码如下: var Str="abc-mng-zhang-mayi"; var newArray=Str.split(&qu

JS中实现字符串和数组的相互转化

早上起来看了一道JS的面试题,是这样描述的:利用var s1=prompt("请输入任意的字符串","")可以获取用户输入 的字符串,试编程将用户输入的字符串"反转",并且将字符串输出. 想了一下,字符串对象的方法中并没有实现反转的,但是数组中有,于是考虑了字符串和数组的相互转换问题. JS中的内置对象中包括字符串对象(String)和数组对象(Array),这两个对象是可以通过它们对象的方法实现相互 转化的.对于String对象,提供了对字符串

json对象与字符串的相互转换,数组和字符串的转换

1.json对象转换为字符串 JSON.stringify(value [, replacer] [, space])  var student = new Object(); student.id = "001"; student.name = "程陈"; student.age = "18"; var str = JSON.stringify(student); //{"id":"001","