如何删除text字段的一部分数据
例如
text字段内容:
其中一条记录的内容为:aasdffgggggggggddd
另一条记录的内容为:ASASSDsdffretgtgggg
现在我想删除text字段上的ff
请问如何处理?
问题点数:0、回复次数:6Top
1 楼tonyring()回复于 2005-04-01 18:09:43 得分 0
drop table textTable
go
create table textTable (textField text)
go
INSERT INTO textTable (textField) VALUES ('aasdffgggggggggddd')
INSERT INTO textTable (textField) VALUES ('ASASSDsdffretgtgggg')
go
select * from textTable
go
update textTable set textField=REPLACE(cast(textField as varchar),'ff','')
go
select * from textTable
比较简单的处理办法,但是textField字段的值不能超过8000Top
2 楼tonyring()回复于 2005-04-01 18:18:05 得分 0
补一句,如果textField字段的值的长度超过了8000,那么应先把textField字段中的值截分为多个段后再处理。。。Top
3 楼zhaovbo(休道梦,觉来空,当时亦梦中)回复于 2005-04-01 18:31:42 得分 0
declare @ptr binary(16)
select @ptr = textptr(text) from TextTable Where ..
updatetext texttable.text @ptr 5 2Top
4 楼chiwei(水手)回复于 2005-04-01 18:42:41 得分 0
update textTable set text=replace(text,'ff','')Top
5 楼tonyring()回复于 2005-04-01 19:22:40 得分 0
在MSSQL的帮助中,索引处查询updatetext,有方法可寻Top
6 楼zjcxc(邹建)回复于 2005-04-01 19:32:35 得分 0
--text字段应该用updatetext来处理(除非你的数据长度没有超过8000字节)
--示例
--测试数据
create table tb(col text)
insert tb select 'aasdffgggggggggddd'
union all select 'ASASSDsdffretgtgggg'
go
--删除ff的处理
declare @p binary(16),@pos int
declare tb cursor local
for
select textptr(col),patindex('%ff%',col)-1
from tb
where TEXTVALID('tb.col',textptr(col))=1 and patindex('%ff%',col)>0
open tb
fetch tb into @p,@pos
while @@fetch_status=0
begin
updatetext tb.col @p @pos 2 ''
fetch tb into @p,@pos
end
close tb
deallocate tb
go
--显示处理结果
select * from tb
go
--删除测试
drop table tb
/*--结果
col
------------------------
aasdgggggggggddd
ASASSDsdretgtgggg
(所影响的行数为 2 行)
--*/Top




