select a.id , replace(a.text , b.name , '***') text from a,b where charindex(b.name,a.text) > 0

解决方案 »

  1.   

    create table A(id int,text varchar(100))
    insert into A values(1,'和兔子安定发生发生扩大发狮子挥和按时豆腐脑氨基酸地方了就') 
    insert into A values(2,'猴子来了似的发射点喀什酱豆腐度时度')
    create table B(id int,name  varchar(10))
    insert into B values(1,         '老虎') 
    insert into B values(2,         '狮子') 
    insert into B values(3,         '大象') 
    insert into B values(4,         '兔子') 
    insert into B values(5,         '猴子')
    goselect a.id , replace(a.text , b.name ,  '*** ') text from a,b where charindex(b.name,a.text)  > 0drop table A,B
    /*
    id          text                                                
    ----------- ----------------------------------------------------
    1           和兔子安定发生发生扩大发*** 挥和按时豆腐脑氨基酸地方了就
    1           和*** 安定发生发生扩大发狮子挥和按时豆腐脑氨基酸地方了就
    2           *** 来了似的发射点喀什酱豆腐度时度(所影响的行数为 3 行)
    */
      

  2.   

    不好意思,我忘了说一点了   就是我的A表的text字段很大  用的是nTEXT 类型,是不能使用replace的```
    不过,还是谢谢老乌龟  能这么快写出来```呵呵```再等大虾中```
      

  3.   

    最好的办法是用自定义函数.当然SQL2005里更方便.
    我下面这个是用动态语句写的.CREATE TABLE ta(id INT IDENTITY(1,1),[TEXT] VARCHAR(200))
    INSERT ta
    SELECT '和兔子安定发生发生扩大发狮子挥和按时豆腐脑氨基酸地方了就'
    UNION ALL SELECT '猴子来了似的发射点喀什酱豆腐度时度'CREATE TABLE tb(id INT IDENTITY(1,1),[Name] VARCHAR(20))
    INSERT tb
    SELECT '老虎'
    UNION ALL SELECT '狮子'
    UNION ALL SELECT '大象' 
    UNION ALL SELECT '兔子' 
    UNION ALL SELECT '猴子' DECLARE @badstr VARCHAR(1000),@rplstr VARCHAR(1000)
    SELECT @rplstr='',@badstr=''
    SELECT @rplstr=@rplstr + 'replace(',@badstr=@badstr + ',''' + Name + ''',''***'')'  FROM tbEXEC('SELECT id,Text='+ @rplstr+'TEXT'+@badstr + ' FROM ta')DROP TABLE ta,tb/*(所影响的行数为 2 行)
    (所影响的行数为 5 行)id          Text                                                                                                                                                                                                                                                             
    ----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
    1           和***安定发生发生扩大发***挥和按时豆腐脑氨基酸地方了就
    2           ***来了似的发射点喀什酱豆腐度时度*/
      

  4.   

    原来新版有插CODE的功能,我重插一下--最好的办法是用自定义函数.当然SQL2005里更方便.
    --我下面这个是用动态语句写的.CREATE TABLE ta(id INT IDENTITY(1,1),[TEXT] VARCHAR(200))
    INSERT ta
    SELECT '和兔子安定发生发生扩大发狮子挥和按时豆腐脑氨基酸地方了就'
    UNION ALL SELECT '猴子来了似的发射点喀什酱豆腐度时度'CREATE TABLE tb(id INT IDENTITY(1,1),[Name] VARCHAR(20))
    INSERT tb
    SELECT '老虎'
    UNION ALL SELECT '狮子'
    UNION ALL SELECT '大象' 
    UNION ALL SELECT '兔子' 
    UNION ALL SELECT '猴子' DECLARE @badstr VARCHAR(1000),@rplstr VARCHAR(1000)
    SELECT @rplstr='',@badstr=''
    SELECT @rplstr=@rplstr + 'replace(',@badstr=@badstr + ',''' + Name + ''',''***'')'  FROM tbEXEC('SELECT id,Text='+ @rplstr+'TEXT'+@badstr + ' FROM ta')DROP TABLE ta,tb/*(所影响的行数为 2 行)
    (所影响的行数为 5 行)id          Text                                                                                                                                                                                                                                                             
    ----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
    1           和***安定发生发生扩大发***挥和按时豆腐脑氨基酸地方了就
    2           ***来了似的发射点喀什酱豆腐度时度*/
      

  5.   

    服务器: 消息 8116,级别 16,状态 1,行 1
    函数 replace 的参数 1 的数据类型 ntext 无效。哪位大虾来帮忙解决这个问题呢  看来replace是不行啊``
      

  6.   

    replace不支持ntext型数据.
    ntext型数据的替换需要自己写存储过程实现.或者,你可以尝试,将 NTEXT数据CONVERT或CAST成VARCHAR再操作.
    CREATE TABLE ta(id INT IDENTITY(1,1),[TEXT] NTEXT)
    INSERT ta
    SELECT N'和兔子安定发生发生扩大发狮子挥和按时豆腐脑氨基酸地方了就'
    UNION ALL SELECT N'猴子来了似的发射点喀什酱豆腐度时度'CREATE TABLE tb(id INT IDENTITY(1,1),[Name] VARCHAR(20))
    INSERT tb
    SELECT '老虎'
    UNION ALL SELECT '狮子'
    UNION ALL SELECT '大象' 
    UNION ALL SELECT '兔子' 
    UNION ALL SELECT '猴子' DECLARE @badstr VARCHAR(1000),@rplstr VARCHAR(1000)
    SELECT @rplstr='',@badstr=''
    SELECT @rplstr=@rplstr + 'replace(',@badstr=@badstr + ',''' + Name + ''',''***'')'  FROM tbEXEC('SELECT id,Text='+ @rplstr+'CAST(TEXT as VARCHAR(2000))'+@badstr + ' FROM ta')
    DROP TABLE ta,tb
      

  7.   

    fcuandy ,好象有问题的哦```我的结果是:
    1 ******************************************
    2 ************************?而且不能简单这样转换吧  TEXT类型的,不一定2000能满足的  这样还是不能很好的解决对全文的一个替换的,
    呵呵  要是这样的话  我还不如就定义成NVARCHAR(4000)了呢```继续等待高人```
      

  8.   

    我这里执行正常. 你那可能确实是因为长度的问题.
    NTEXT的替换,不支持REPLACE,需要自己写代码 对 待替换部分做定位