字段BASE_UNIT为VARCHAR(10)类型,我想从字段BASE_UNIT中减去一部分字符也就是参数@UNIT,比如原来是'块包箱捆',参数@UNIT='捆',执行语句之后,字段BASE_UNIT变为'块包箱',我用的下面的语句:
update GOODS_GOODS set BASE_UNIT=BASE_UNIT-@UNIT where ID=1000;
但是失败了,不知道该如何实现,我查了下函数,也没找到合适的函数。请帮忙,先谢谢了。
我往这个字段追加字符的时候没报错:update GOODS_GOODS set BASE_UNIT=BASE_UNIT+@UNIT where ID=1000;

解决方案 »

  1.   

    update GOODS_GOODS set BASE_UNIT=replace(BASE_UNIT,@UNIT,'') where ID=1000;
      

  2.   

    这函数确实好,另外我问一下,如果BASE_UNIT是'包块箱捆',参数@UNIT='捆',调用replace()函数,结果就是'包块箱',但是如果是下面的情况会不会出错,BASE_UNIT是'块-块-块-块-',参数@UNIT='块-',那调用replace()函数,结果是不是BASE_UNIT字段就成空了???还是只替换其中的一个'块-',???
      

  3.   

    结果是BASE_UNIT字段为空
    试试下面的代码:
    declare @a char(20)
    declare @b char(4)
    declare @c char(20)
    set @a = '快-快-快-快-快-'
    set @b = '快-'
    set @c = replace(@a,@b,'')
    select @c,len(@c)
      

  4.   

    declare @a char(20)
    declare @b char(4)
    declare @c char(20)
    set @a = '快-快-快-快-快-aa'
    set @b = '快-'set @a=reverse(@a)
    set @b=reverse(@b)
    set @c = reverse(substring(@a,len(@b),len(@a)-len(@b)))
    select @c,len(@c)                     
    -------------------- -----------
    -快-快-快-快-aa          11(1 行受影响)
      

  5.   

    set @c = reverse(substring(@a,len(@b)-1,len(@a)-len(@b)))
      

  6.   

    declare @a varchar(20)
    declare @b varchar(4)
    set @a = '快-快-快-快-快-aa'
    set @b = '快-'
    select STUFF(@a,charindex(@b,@a),len(@b),'')
    /*
    快-快-快-快-aa
    */
      

  7.   


    STUFF
    删除指定长度的字符并在指定的起始点插入另一组字符。示例
    下例通过在第一个字符串 (abcdef) 中删除从第二个位置(字符 b)开始的三个字符,然后在删除的起始位置插入第二个字符串,创建并返回一个字符串。 SELECT STUFF('abcdef', 2, 3, 'ijklmn')
    GO下面是结果集:--------- 
    aijklmnef (1 row(s) affected)