chaindex(@key,@spilt_string)
位置查找函数@key:表示在字符串中查找的表示符
@spilt_string:表示查找的字符串stuff(@str,@start_pos,@end_pos,@stuff_str)
根据位置把原字符串中的 @start_pos 到@end_pos之间的字符串改成 @stuff_str 字符串@str :要替换的总字符串
@start_pos:替换的起始位置
@end_pos  :替换的结束位置
@strff_str:替换成字符串stuff('123456',2,3,'888') 
188856
把 234 替换成 888

解决方案 »

  1.   

    呵呵,我机器上的连机帮助怎么和你们的不一样,而且运行起来还不一样????CHARINDEX
    返回字符串中指定表达式的起始位置。 语法
    CHARINDEX ( expression1 , expression2 [ , start_location ] ) 参数
    expression1一个表达式,其中包含要寻找的字符的次序。expression1 是一个短字符数据类型分类的表达式。expression2一个表达式,通常是一个用于搜索指定序列的列。expression2 属于字符串数据类型分类。start_location在 expression2 中搜索 expression1 时的起始字符位置。如果没有给定 start_location,而是一个负数或零,则将从 expression2 的起始位置开始搜索。返回类型
    int
    -------------------------------------------------------------
    也就是说,在我这里,第一个参数是子串,第二个参数才是母串
    正好和你们提供的是相反的?为什么?
      

  2.   

    2、在set @s=stuff(@s,1,charindex(@split,@s)+@splitlen-1,'')中少写一个1这个应该不用改
    set @s=stuff(@s,1,charindex(@split,@s)+@splitlen,'')
      

  3.   

    TO:Yang_(扬帆破浪)
    declare @s nvarchar(3000)
    declare @ss nvarchar(10)
    declare @re table(col nvarchar(100))
    declare @splitlen intset @s='132,199,999,993,21000,00032188,888'
    set @ss=','
    set @splitlen=len(@ss)while charindex(@ss,@s)>0
          begin
             insert @re values(left(@s,charindex(@ss,@s)-1))
             set @s=stuff(@s,1,charindex(@ss,@s)+@splitlen-1,'')
    --insert @re values(@s)
          end 
       insert @re values(@s)
    select * from @re这样返回的是
    132
    199
    999
    993
    21000
    00032188
    888 如果改成set @s='132,199,999,993,21000,00032188,888'
    set @ss=','
    set @splitlen=len(@ss)while charindex(@ss,@s)>0
          begin
             insert @re values(left(@s,charindex(@ss,@s)-1))
             set @s=stuff(@s,1,charindex(@ss,@s)+@splitlen,'')
    --insert @re values(@s)
          end 
       insert @re values(@s)
    select * from @re结果是这样的132
    99
    99
    93
    1000
    0032188
    88所以我添加了一个1
      

  4.   

    是的,关于charindex那个贴的代码是错误的
      

  5.   

    你改了原来 贴的一个代码原贴
    set @splitlen=len(@split+'a')-2你
    set @splitlen=len(@ss)所以你需要-1,原贴不需要