高手忙我解决一个替换问题

我有一个字段类型为text但我要对他进行replace但sql server对text不支持replace
如果改成varchar则一定不够,要如何解决呢,
---------------------------------------------------------------

最笨的方法,
读出来,写到WORD,通过WORD来替换。
---------------------------------------------------------------

将Text转为字符串,再替换,如
MYTEXT字段为Text型
UPDATE TABLE1
SET MYTEXT = REPLACE(CONVERT(VARCHAR,MYTEXT),'AA','BB')
---------------------------------------------------------------

用readtxt读部分数据块,replace 更改然后updatetxt写回去,

以此做个循环修改的函数。调用一下即可
---------------------------------------------------------------

create table #t(txt text)

insert into #t values('asdfa$$$ljljl$$$1234$$$')
insert into #t values('$$$123$$')
insert into #t values('34$$$as')

go

DECLARE @val varbinary(16)
declare @n int
declare @len int
declare @old varchar(8000)
declare @new varchar(8000)

set @old = '$$$'
set @new = '@@'
set @len = len(@old)

while 1=1
begin
SELECT top 1 @val = TEXTPTR(txt),@n = patindex('%'+@old+'%',txt)-1
from #t
where patindex('%'+@old+'%',txt) > 0
if @@rowcount = 0
break
updatetext #t.txt @val @n @len @new
end

go

select * from #t
--asdfa@@ljljl@@1234@@
--@@123$$
--34@@as

但是,如果将'$$$'转成'$$'则可能会出问题。自己再想想,我没时间了:)
---------------------------------------------------------------

好像可以的啊!

create table #t(txt text)

insert into #t values('asdfa$$$$ljljl$$$$1234$$$$')
insert into #t values('$$$$123$$')
insert into #t values('34$$$$as')

go

DECLARE @val varbinary(16)
declare @n int
declare @len int
declare @old varchar(8000)
declare @new varchar(8000)

set @old = '$$$$'
set @new = '$$'
set @len = len(@old)

while 1=1
begin
SELECT top 1 @val = TEXTPTR(txt),@n = patindex('%'+@old+'%',txt)-1
from #t
where patindex('%'+@old+'%',txt) > 0
if @@rowcount = 0
break
updatetext #t.txt @val @n @len @new
end
go

select * from #t

drop table #t

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus