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 tbEXEC('SELECT id,Text='+ @rplstr+'TEXT'+@badstr + ' FROM ta')DROP TABLE ta,tb/*(所影响的行数为 2 行) (所影响的行数为 5 行)id Text ----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 和***安定发生发生扩大发***挥和按时豆腐脑氨基酸地方了就 2 ***来了似的发射点喀什酱豆腐度时度*/
原来新版有插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 ***来了似的发射点喀什酱豆腐度时度*/
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
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 行)
*/
不过,还是谢谢老乌龟 能这么快写出来```呵呵```再等大虾中```
我下面这个是用动态语句写的.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 ***来了似的发射点喀什酱豆腐度时度*/
--我下面这个是用动态语句写的.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 ***来了似的发射点喀什酱豆腐度时度*/
函数 replace 的参数 1 的数据类型 ntext 无效。哪位大虾来帮忙解决这个问题呢 看来replace是不行啊``
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
1 ******************************************
2 ************************?而且不能简单这样转换吧 TEXT类型的,不一定2000能满足的 这样还是不能很好的解决对全文的一个替换的,
呵呵 要是这样的话 我还不如就定义成NVARCHAR(4000)了呢```继续等待高人```
NTEXT的替换,不支持REPLACE,需要自己写代码 对 待替换部分做定位