日期:2014-05-18  浏览次数:20369 次

查找常字段中存在的短字段,并替换相应的,请大虾提供@好@的解决方案!!
表A:
id text  
1 和兔子安定发生发生扩大发狮子挥和按时豆腐脑氨基酸地方了就
2 猴子来了似的发射点喀什酱豆腐度时度
表B:

id name  
---------- ---------- 
1 老虎
2 狮子
3 大象
4 兔子
5 猴子

如何更新表A中含有表B的字段,如将A变为:

id text  
1 和***安定发生发生扩大发***挥和按时豆腐脑氨基酸地方了就
2 ***来了似的发射点喀什酱豆腐度时度




------解决方案--------------------
select a.id , replace(a.text , b.name , '***') text from a,b where charindex(b.name,a.text) > 0
------解决方案--------------------
SQL code
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,         '猴子')
go

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

drop table A,B
/*
id          text                                                
----------- ----------------------------------------------------
1           和兔子安定发生发生扩大发*** 挥和按时豆腐脑氨基酸地方了就
1           和*** 安定发生发生扩大发狮子挥和按时豆腐脑氨基酸地方了就
2           *** 来了似的发射点喀什酱豆腐度时度

(所影响的行数为 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 tb

EXEC('SELECT id,Text='+ @rplstr+'TEXT'+@badstr + ' FROM ta')

DROP TABLE ta,tb

/*

(所影响的行数为 2 行)


(所影响的行数为 5 行)

id Text
----------- ---------------------------------------------------------------------------------------------------------------- 
1 和***安定发生发生扩大发***挥和按时豆腐脑氨基酸地方了就
2 ***来了似的发射点喀什酱豆腐度时度

*/

------解决方案--------------------
replace不支持ntext型数据.
ntext型数据的替换需要自己写存储过程实现.

或者,你可以尝试,将 NTEXT数据CONVERT或CAST成VARCHAR再操作.

SQL code

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 tb

EXEC('SELECT id,Text='+ @rplstr+'CAST(TEXT as VARCHAR(2000))'+@badstr + ' FROM ta')


DROP TABLE ta,tb