DECLARE @len int
DECLARE @s varchar(8000)
DECLARE @s1 varchar(8000)
set @s=',200501'
set @s1=',200401,200501,200601'
set @len=CHARINDEX(',200601',@s1)-CHARINDEX(@s,@s1)
print CHARINDEX(',200601',@s1)
print '减'
print CHARINDEX(@s,@s1)
print '等于'
print @len
结果:
15

8
等于
715-8不等于7那等于什么?

解决方案 »

  1.   

    --测试数据
    --建表
    create table sxl
    (
    aa varchar(20),
    bb varchar(200)
    )create table xxy
    (
    wjh varchar(20),
    ny varchar(200)
    )
    --插入数据
    insert into sxl(aa,bb)
    select '1111111',',200401,200501,200601' union all
    select '2222222',',200401,200505,200601' union all
    select '3333333',',200401,200501,200601'insert into xxy(wjh,ny)
    select '1111111',',200501' union all
    select '2222222',',200505' union all
    select '3333333',',200501'--执行语句(从你那里拷贝的)
    DECLARE @len int
    DECLARE @len3 int
    DECLARE @s varchar(8000)
    DECLARE @s1 varchar(8000)
    DECLARE @s2 varchar(8000)
    DECLARE Customer_cursor2 cursor for
    select wjh,ny from xxy
    open Customer_cursor2 
    Fetch Next from Customer_cursor2
    into @s,@s1
    while @@Fetch_status=0Begin
    select @s2=bb   FROM sxl  WHERE   aa=@s
    set @len=CHARINDEX(',200601',@s2)-CHARINDEX(@s1,@s2)
    select @len
    Fetch Next From Customer_cursor2
    into @s,@s1
    end
    close Customer_cursor2
    Deallocate Customer_cursor2--结果
    --------------------------------
    7
    ----
    7
    ----
    7  
    --------------------------------你说的执行结果是15是指的什么啊?
      

  2.   

    把select @len
    改为
    update sxl set bb = stuff(@s2,CHARINDEX(@s1,@s2),@len,'') where aa = @s执行后的结果:
    ---------------------------
    1111111 ,200401,200601
    2222222 ,200401,200601
    3333333 ,200401,200601
    ---------------------------不知道还有什么问题?
      

  3.   

    为什么我执行的都是15,
    CHARINDEX(@s1,@s2)为0
      

  4.   

    set @len=CHARINDEX(',200601',@s2)-CHARINDEX(@s1,@s2)
    得出的值是15;经过测试CHARINDEX(@s1,@s2)为0
    为什么???