text字段的替换问题,希望那位老师给指点迷津

lxny 2007-05-10 10:14:29
表dict100_400有3个字段 ename,zhname,exname其中exname是TEXT类型,最长的文字达15000多,本来打算导入数据是用varchar(8000),结果发现失败,于是把exname改成TEXT类型了,但是现在遇到个问题:

数据库中数据是这样的,比如
exname zhname exname
----------------------------------
map 地图;测图 ~ controlled|地图定位,~ in roll|卷图,卷轴图,~ into|映入......

map的exname比较长 有15123字节

现在我怎么做才能把exname中的~替换为map就比如:
map controlled|地图定位,map in roll|卷图,卷轴图,map into|映入,

当然,数据库中5000条记录有100多条是这样,一句搞定最好了
...全文
313 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxny 2007-12-27
  • 打赏
  • 举报
回复
6楼的办法是不错的,下次再遇到这样的问题,我直接在sqlserver2005中处理,然后再导成sqlserver2000的
gc_ding 2007-06-12
  • 打赏
  • 举报
回复
create table #t(id int,Context text)
insert into #t select 1,'zzzabczzz'

--如果长度大于8000,用如下语句
Declare @s_str varchar(8000), @d_str varchar(8000)
Select @s_str='abc' , --要替换的字符串
@d_str='110' --替换成的字符串

Declare @p varbinary(16),@postion int,@rplen int
Select @p=textptr(Context),@rplen=len(@s_str),@postion=charindex(@s_str,Context)-1 from #t
while @postion>=0
begin
updatetext #t.Context @p @postion @rplen @d_str
select @postion=charindex(@s_str,Context)-1 from #t
end

select * from #t

drop table #t

/*
id Context
--------------------------
1 zzz110zzz
*/
postform999 2007-06-11
  • 打赏
  • 举报
回复
是sql server2005吗?
尝试用varchar(max)类型看看~
lwl0606 2007-06-11
  • 打赏
  • 举报
回复
看一下我写的
drop table att
create table att(id int ,atext Ntext)
insert into att select 1,N'~ controlled|地图定位,~ in roll|卷图,卷轴图,~ into|映入......'
insert into att select 2,N'地图定位|映入......'
insert into att select 3,N'~ controlled|地图定位,~~ into|映入......'




declare @aa BINARY(16)
declare @i int
declare @id int
declare RepaceText cursor
for
select id,PATINDEX('%~%', atext) from att where PATINDEX('%~%', atext)>0
open RepaceText
fetch next from RepaceText into @id,@i
while @@fetch_status=0
begin
--print @id
while @i>=0
begin
SELECT @aa = TEXTPTR(atext),
@i = PATINDEX('%~%', atext) - 1
FROM att
WHERE id = @id
--print @i
if @i>=0
begin
UPDATETEXT att.atext
@aa
@i --插入的位置
1 --删除的字符数
WITH LOG
'map' --要新插入的文本

end
else
begin
break
end
end

fetch next from RepaceText into @id,@i
end
close RepaceText
deallocate RepaceText


--查看结果
select * from att


--
1 map controlled|地图定位,map in roll|卷图,卷轴图,map into|映入......
2 地图定位|映入......
3 map controlled|地图定位,mapmap into|映入......
stou 2007-06-06
  • 打赏
  • 举报
回复
学习
lxny 2007-05-10
  • 打赏
  • 举报
回复
自己顶下
lxny 2007-05-10
  • 打赏
  • 举报
回复
不行,我搞不来,字段中有很多位置都有这个东西~
lxny 2007-05-10
  • 打赏
  • 举报
回复
我套用一下看看哈
leo_lesley 2007-05-10
  • 打赏
  • 举报
回复
------邹老大的例子-----
CREATE TABLE tb(col text,col1 text,col2 text)
INSERT tb SELECT 'a' ,NULL,'c2'
UNION ALL SELECT NULL,'b2','c2'
UNION ALL SELECT '' ,'b3',NULL
GO

--뫘劤뇹잿
DECLARE @p binary(16),@p1 binary(16),@p2 binary(16)
DECLARE tb CURSOR LOCAL
FOR
SELECT TEXTPTR(col),TEXTPTR(col1),TEXTPTR(col2) FROM tb
OPEN tb
FETCH tb INTO @p,@p1,@p2
WHILE @@FETCH_STATUS=0
BEGIN
IF TEXTVALID('tb.col',@p)=0
BEGIN
UPDATE tb SET col='' WHERE CURRENT OF tb
UPDATE tb SET @p=TEXTPTR(col) WHERE CURRENT OF tb
END
IF TEXTVALID('tb.col1',@p1)=1
BEGIN
UPDATETEXT tb.col @p NULL 0 '<col1>'
UPDATETEXT tb.col @p NULL 0 tb.col1 @p1
UPDATETEXT tb.col @p NULL 0 '</col1>'
END
IF TEXTVALID('tb.col2',@p2)=1
BEGIN
UPDATETEXT tb.col @p NULL 0 '<col2>'
UPDATETEXT tb.col @p NULL 0 tb.col2 @p2
UPDATETEXT tb.col @p NULL 0 '</col2>'
END
FETCH tb INTO @p,@p1,@p2
END
CLOSE tb
DEALLOCATE tb
GO

--鞫刻써벎
SELECT * FROM tb
DROP TABLE tb
/*--써벎
col col1 col2
-------------------------------------- ----------------------- ----------------------
a<col2>c2</col2> NULL c2
<col1>b2</col1><col2>c2</col2> b2 c2
<col1>b3</col1> b3 NULL
--*/

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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