set @a='-1,-1,-1,-1,-1,-1,-1,-1,-1,-1';
set @b=2;
b=2的意思是第2个-1要变为"11"
MYSQL中:
set @a='-1,-1,-1,-1,-1,-1,-1,-1,-1,-1';
set @b=2;
select concat(concat(mid(@a,1,3(@b-1)),
replace(mid(@a,3(@b-1)+1,2),"-1","11")),
mid(@a,3*@b,length(@a)-3(@b-1)-2));MSSQL中如何写?

解决方案 »

  1.   


    --可以这么写,@b在1和10之间时,不会出错
    declare @a varchar(50), @b int
    set @a='-1,-1,-1,-1,-1,-1,-1,-1,-1,-1';
    set @b=10;
    select substring(@a,1,(@b-1)*3)+'11,'+substring(@a,@b*3+1,8000)记得结贴哦
      

  2.   

    DECLARE @a varchar(8000),@b int,@c varchar(10);set @a='-1,-1,-1,-1,-1,-1,-1,-1,-1,-1';
    set @b=2;
    set @c = '11'declare @x xml;SET @x = (select convert(xml,'<v>'+replace(@a,',','</v><v>')+'</v>'));set @x.modify('replace value of (/v[position()=sql:variable("@b")]/text())[1] with sql:variable("@c")')select 
    stuff((select ','+t.x.value('.','varchar(10)') as [text()]
    from @x.nodes('//v') as t(x)
    for xml path('')),1,1,'')
      

  3.   

    DECLARE @A NVARCHAR(MAX),@B INT,@SQL NVARCHAR(MAX)
    SET @A='-1,-1,-1,-1,-1,-1,-1,-1,-1,-1'
    SET @B=3
    SELECT STUFF(@A,3*@B-2,3*@B-1,'11')
      

  4.   

    DECLARE @A NVARCHAR(MAX),@B INT,@SQL NVARCHAR(MAX)
    SET @A='-1,-1,-1,-1,-1,-1,-1,-1,-1,-1'
    SET @B=6
    SELECT STUFF(@A,3*@B-2,2,'11')
    有点小问题 不好意思 这会对了