查找常字段中存在的短字段,并替换相应的,请大虾提供@好@的解决方案!!
表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
[解决办法]
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 行)*/
[解决办法]
最好的办法是用自定义函数.当然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再操作.
CREATE TABLE ta(id INT IDENTITY(1,1),[TEXT] NTEXT)INSERT taSELECT N'和兔子安定发生发生扩大发狮子挥和按时豆腐脑氨基酸地方了就'UNION ALL SELECT N'猴子来了似的发射点喀什酱豆腐度时度'CREATE TABLE tb(id INT IDENTITY(1,1),[Name] VARCHAR(20))INSERT tbSELECT '老虎'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