如何替换text类型字段的内容?请高手帮我~

yoki 2003-03-25 12:16:16
t表(r1为text类型)
id r1
1 acbekih;xaxv
2 jloasdkjnva;ia
3 -kdlf-2kjcvn,.
4 asdjf0a9u23jlkfa-
5 asdfan,mnxcvn0IOAS
6 ASDFDSAJiadfiap
7 alkjlk
如何替换t表中的数据?(a->aa,b->cc,c->ii,fan->nis)注意t1为text类型~
...全文
71 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
yoki 2003-04-02
  • 打赏
  • 举报
回复
请高手继续关注一下。。。
yoki 2003-03-28
  • 打赏
  • 举报
回复
还是不行...
:<
yonghengdizhen 2003-03-27
  • 打赏
  • 举报
回复
DECLARE @ptrval binary(16)
SELECT @ptrval = TEXTPTR(pr_info)
FROM pub_info pr, publishers p
WHERE p.pub_id = pr.pub_id
AND p.pub_name = 'New Moon Books'
UPDATETEXT pub_info.pr_info @ptrval 88 1 'b'


结合PATINDEX的文本检索能力进行位置查找
yoki 2003-03-27
  • 打赏
  • 举报
回复
多些大力~,我试试看
luman 2003-03-27
  • 打赏
  • 举报
回复
study
大健 2003-03-27
  • 打赏
  • 举报
回复
学习
yonghengdizhen 2003-03-27
  • 打赏
  • 举报
回复
declare @ptrval BINARY(16);
declare @position int;
declare @length int;
SELECT @ptrval=TEXTPTR(LSD_Comment),@length=datalength(LSD_Comment),@position=PATINDEX('%a%',LSD_Comment) FROM Legal_Dispute WHERE LD_Record_No=25;
UPDATETEXT Legal_Dispute.LSD_Comment @ptrval @position 0 N'No Change By angle on 3/26/2003 11:16:36 AM '
SELECT LSD_Comment FROM Legal_Dispute WHERE LD_Record_No=25;
CrazyFor 2003-03-27
  • 打赏
  • 举报
回复
大力的方法不行嘛,应该可以的啊。
yonghengdizhen 2003-03-27
  • 打赏
  • 举报
回复
to tj_dns(愉快的登山者)

谁说只能进行长度不变的修改???

UPDATETEXT pub_info.pr_info @ptrval 0 0 'your text' 就可以实现插入操作了..

UPDATETEXT pub_info.pr_info @ptrval x 0 'your text'
这里你只要找到x的正确位置就OK了,而这一点你可以通过PATINDEX去定位
pengdali 2003-03-26
  • 打赏
  • 举报
回复
我写错了!看看谁改改!

create table #t(a int,r1 text)
insert #t values(1,'acbekih;xaxv')
insert #t values(2,'jloasdkjnva;ia')
insert #t values(3,'-kdlf-2kjcvn,.')
insert #t values(4,'asdjf0a9u23jlkfa-')
insert #t values(5,'asdfan,mnxcvn0IOAS')
insert #t values(6,'ASDFDSAJiadfiap')
insert #t values(7,'alkjlk')

declare @ptr varbinary(16),@len int,@i int
set @i=(select max(a) from #t)
while (@i>0)
begin
select @len=datalength(r1),@ptr=TEXTPTR(r1) from #t where a=@i
if @@rowcount>0
begin
declare @bb int,@cc int
select @bb=0
select @cc=charindex('a',r1) from #t where a=@i

while @cc>0
begin
set @bb=@cc+1
select @cc=charindex('a',r1,@bb) from #t where a=@i
updatetext #t.r1 @ptr @cc 1 'c'
end

end
set @i=@i-1
end

select * from #t
go
drop table #t
yoki 2003-03-26
  • 打赏
  • 举报
回复
谢谢~
看来还挺麻烦的,难道在处理text类型的数据时只能这样?
Chiff 2003-03-26
  • 打赏
  • 举报
回复
你可以用patindex('%bc%',txt)的方法得到字符串的位置,然后通过循环来完成各个字符串处理。如果你想通过一条语句来处理,估计难以实现。

另一种方式是:通过datalength得到text字段长度,然后将之分成若干个varchar变量,通过循环调用处理。不过还不如第一种方法,除非你的字段内容绝大部分都在8000以内!


yoki 2003-03-26
  • 打赏
  • 举报
回复
问题是我的字段中并不知道所要替换的字符串的位置呀,
而且在一个字段当中要替换好几个字符串,也就是说要替换好几次,怎么办?
要是字符串替换的话还可以用replace(replace(a,'cc','dd'),'vv','mm')之类,
不知道对于text类型该如何处理?
Chiff 2003-03-26
  • 打赏
  • 举报
回复
可以实现的,以下是我写的一个例子,将bc改为bbcc。

--drop table t
--go

create table t(txt text)


insert into t values('12abcdefg')


declare @ptr varbinary(16)
select @ptr = TEXTPTR(txt) from t

--将bc改为bbcc
UPDATETEXT t.txt @ptr 4 2 'bbcc'
--4表示从第四个字符后开始替换,2表示替换原来的两个位置,'bbcc'是替换的新字串
go
select * from t


愉快的登山者 2003-03-25
  • 打赏
  • 举报
回复
updatetext函数只能实现长度不变的修改,如:a->b,b->c,c->i,fan->nis等;
但寻找位置也是很麻烦的,不如先将数据读出来,然后修改后再写入。
qilinmaster 2003-03-25
  • 打赏
  • 举报
回复
/* deal with LOB in SQL SERVER */

declare @ptrtext varbinary(16)
begin tran
select @ptrtext = TEXTPTR(r1) from t(UPDLOCK)
where id = 1;
if @ptrText is not null
UPDATETEXT t.r1@ptrtext 0 NULL 'This is a try'
commit tran
/* end */

不懂的可以看SQL SERVER onlinebook
yoki 2003-03-25
  • 打赏
  • 举报
回复
直接用sql语句不行吗?我看可能要用UPDATETEXT函数
不过我不会用
CrazyFor 2003-03-25
  • 打赏
  • 举报
回复
在前台做吧。
yoki 2003-03-25
  • 打赏
  • 举报
回复
没人会??

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧