请问如何在存储过程中判断01字符串中1的位置呢?比如说010001001,我想知道这个字符串中有几个1,而且这几个1分别在什么位置.比如这个就是第二位,第六位......
还有,我如何才能知道这个字符串的长度呢?

解决方案 »

  1.   

    用len函数知道返回字符串长度。
      

  2.   

    用substring函数,如:substring('001000111',3,1)长度:select len('01010111011')
      

  3.   

    用charindex返回第一个字符1的位置
    要是判断有多少个1就要写自定义的函数来处理了。
      

  4.   

    declare @str varchar(100)
    declare @s varchar(100)
    set @str='010001001'
    set @s=''
    while charindex('1',@str)>0
    begin
    select @s=@s+' '+cast(charindex('1',@str)as varchar(1))
    select @str=stuff(@str,charindex('1',@str),1,'0') print @str
    end
    set @s='字符串'+@str+'中1的位子为:'+@s
    print @s
      

  5.   

    判断多少个1
    declare @t varchar(20)
    set @t='11100010201'
    print len(@t)-len(replace(@t,'1',''))
      

  6.   

    declare @str varchar(100)
    declare @str1 varchar(100)
    declare @s varchar(100)
    set @str='010001001'
    set @str1='010001001'
    set @s=''
    while charindex('1',@str)>0
    begin
    select @s=@s+' '+cast(charindex('1',@str)as varchar(1))
    select @str=stuff(@str,charindex('1',@str),1,'0') 
    end
    set @s='字符串'+@str1+'中1的位子为:'+@s
    print @s
    结果为:字符串010001001中1的位子为: 2 6 9
      

  7.   

    我是这样写的,但为什么不行呢?用left和stuff这两个函数为什么不行呢?我是用left来取左侧第一个数,然后用stuff来去掉这个刚取过的数,但是实验的时候发现所取的这个字符并没有取到,因为在插入表的时候没有成功.是不是stuff用空格来替换并不是真正去换了一个字符呢?请诸君为我解答.最初前面提的问题已解决.此问题占此文的25分.
      declare  @Count            int
      declare  @ResultCopy   varchar (16)
      declare  @AnswerFlag   char(1)   while (@Count > 0)
       begin 
          /*取最左边的一个字符*/ 
          select @AnswerFlag = left(@ResultCopy,1);     
          insert into T_test2 (dd,gg) values (@AnswerFlag,@AnswerFlag)
          
          set  @Count = @Count - 1
          /*将最左字符以""代替*/      
          select stuff(@ResultCopy,1,1,'');
       end