表t的 a 有数据"alsdkfjlkasdjflaksdf [abc] fsdkjfdsfsdf"
现在想把"[abc]"换成"[123]"
只用sql语句可以实现吗

解决方案 »

  1.   

    现在想把"[abc]"换成"[123]"replace('alsdkfjlkasdjflaksdf [abc] fsdkjfdsfsdf','[abc]','[123]')
      

  2.   

    replace('alsdkfjlkasdjflaksdf [abc] fsdkjfdsfsdf','[abc]','[123]')
      

  3.   

    只選擇
    select 字段=replace(字段,'[abc]','[123]') from tb如果更新
    update tb set 字段=replace(字段,'[abc]','[123]')
      

  4.   

    如果是这样的数据呢?replace('alsdkfjlkasdjflaksdf [abc] fsdk [abc] jfdsfsdf','[abc]','[123]')
    会产生怎样的结果啊?
      

  5.   

    --text字段的替换处理示例--全表替换--测试数据
    create table test(id varchar(3),txt ntext)
    insert into test
    select '1','alsdkfjlkasdjflaksdf [abc] fsdk [abc] jfdsfsdf'
    go--定义替换的字符串
    declare @s_str varchar(8000),@r_str varchar(8000)
    select @s_str='[abc]'  --要替换的字符串
    ,@r_str='[123]' --替换成的字符串--替换处理
    declare @id int,@ptr varbinary(16)
    declare @start int,@s nvarchar(4000),@len int
    declare @s_str1 nvarchar(4000),@s_len int,@i int,@step intselect @s_str1=reverse(@s_str),@s_len=len(@s_str)
    ,@step=case when len(@r_str)>len(@s_str)
    then 4000/len(@r_str)*len(@s_str)
    else 4000 enddeclare tb cursor local for 
    select id,start=charindex(@s_str,[txt])-1
    from [test]
    where charindex(@s_str,[txt])>0
    --这里可以定义要处理的记录的条件open tb 
    fetch tb into @id,@start
    while @@fetch_status=0
    begin
    select @ptr=textptr([txt])
    ,@s=substring([txt],@start+1,@step)
    from [test]
    where id=@id while len(@s)>=@s_len
    begin
    select @len=len(@s),@i=charindex(@s_str1,reverse(@s))
    if @i>0
    begin
    select @i=case when @i>=@s_len then @s_len else @i end
    ,@s=replace(@s,@s_str,@r_str)
    updatetext [test].[txt] @ptr @start @len @s
    end
    else
    set @i=@s_len
    select @start=@start+len(@s)-@i+1
    ,@s=substring([txt],@start+1,@step)
    from [test]
    where id=@id
    end
    fetch tb into @id,@start
    end
    close tb
    deallocate tb
    go--显示处理结果
    select * from test
    go--删除测试
    drop table test/*--测试结果id   txt                                               
    ---- --------------------------------------------------
    1    abc我是[中国的]国人,deaf;sdakj21432我要处理中文(所影响的行数为 1 行)
    --*/
      

  6.   

    --测试结果是这个id   txt                                               
    ---- --------------------------------------------------
    1    alsdkfjlkasdjflaksdf [123] fsdk [123] jfdsfsdf(所影响的行数为 1 行)
      

  7.   

    update t set a=replace(a,'[abc]','[123]')
    where a like '&[abc]&'
      

  8.   

    update t set a=replace(a,'[abc]','[123]')
    where a like '%[abc]%'