散分,顺便咨询一下关于TEXT字段的查询,增加,替换方法
part_no(varchar(25)),rem(text)
有如下记录(注意有回车换行,还有全角,半角标点,SQL2000环境)
A001
第一章 总则
第二章 土地的所有权和使用权
第三章 土地利用总体规划
第四章 耕地保护
A002
第五章 建设用地
第六章 监督检查
第七章 法律责任
第八章 附则
A003
第一条 为了加强土地管理,维护土地的社会主义公有制,保护、开发土地资源,
合理利用土地,切实保护耕地.促进社会经济的可持续发展,
根据宪法,制定本法。
A004
......(此处省略若干记录)
有以下问题诚心请教
<1> 我在用SELECT查询这些记录时为什么REM只能显示256个字符呢,我怎么样查询才能全部显示?为何我导入TEXT记录时也会有256限制?
<2> 如果我将这些记录中 "土地 "替换成 "天地 ",该如何写(如果不能全部替换,将记录中首次出现的 "土地 "替换也行)?怎么我有时用updatext替换时会出现乱码?
<3> 回车在记录中是以什么标记保存的?如果我在rem中包含 "地 "字符的记录末尾回车换行再追加 "TEST "该如何写SQL?
<4> 关于TEXT字段查询追加替换的详细用法谁能共享一下(在中文环境下)
[解决办法]
text类型不是很懂,如果LZ用 SQL2005 可以把 text 换成 varchar(max) 或者是 nvarchar(max)
text类型是不能像字符串类型那样使用字符串函数进行操作的,所以LZ想替换是不可能的
回车在记录中是以什么标记保存的?如果我在rem中包含 "地 "字符的记录末尾回车换行再追加 "TEST "
----------------------------------------------
回车用 char(13)
比如 '地 ' + char(13) + 'TEST '
[解决办法]
上面都说了~来接分嘻嘻~
[解决办法]
我也来接分....
[解决办法]
查询分析器--》工具--》选项--》结果--》每列最大字符数
[解决办法]
JF吧
[解决办法]
我也来帮你顶
顺便接分....
[解决办法]
jf
[解决办法]
jf
[解决办法]
呵呵,LZ
如果Text类型存储长度不超过8000
可以先转换成Varchar再进行处理,那样就方便的多了
路过.....JF
[解决办法]
路过,接分
[解决办法]
还是来接分的啊。
[解决办法]
学习顺便接分
[解决办法]
学习~~
[解决办法]
關於替換內容,可以看看我在這個帖子中的回復
http://community.csdn.net/Expert/topic/5702/5702948.xml?temp=.1510736
[解决办法]
jf
[解决办法]
me too
[解决办法]
JF
[解决办法]
--邹老大写的
--测试数据
create table tb(col ntext)
insert tb values(replicate( '0001,0002,0003,0004,0005,0006,0007,0008,0009,0100, '
+ '220000001,302000004,500200006,700002008,900002120, ',8000))
declare @p binary(16)
select @p=textptr(col) from tb
updatetext tb.col @p null 0 tb.col @p
select * from tb
go
--替换处理定义
declare @s_str nvarchar(1000),@r_str nvarchar(1000)
select @s_str= '00 ' --要替换的字符串
,@r_str= 'aa ' --替换成该字符串
declare @p varbinary(16)
declare @start int,@s nvarchar(4000),@len int
declare @s_len int,@step int,@last_repl int,@pos int
--替换处理参数设置
--@s_len用于要判断每次截取数据,最后一个被替换数据位置的处理
--@step为每次应该截取的数据的长度,防止replace后数据溢出
select @s_len=len(@s_str)
,@step=case when len(@r_str)> len(@s_str) then 4000/len(@r_str)*len(@s_str) else 4000 end
--替换处理的开始位置
select @start=patindex( '% '+@s_str+ '% ',col),@p=textptr(col)
,@s=substring(col,@start,@step),@len=len(@s),@last_repl=0
from tb
where patindex( '% '+@s_str+ '% ',col)> 0 and textvalid( 'tb.col ',textptr(col))=1
while @len> =@s_len
begin
--得到最后一个被替换数据的位置
while charindex(@s_str,@s,@last_repl)> 0
set @last_repl=@s_len + charindex(@s_str,@s,@last_repl)
--如果需要,更新数据,同时判断下一个取数位置的偏移量
if @last_repl=0
set @last_repl=@s_len
else
begin
select @last_repl=
case
when @len <@last_repl then 1
when @len-@last_repl> =@s_len then @s_len
else @len-@last_repl+2
end
,@s=replace(@s,@s_str,@r_str),@pos=@start-1
updatetext tb.col @p @pos @len @s
end
--获取下一个要处理的数据
select @start=@start+len(@s)-@last_repl+1,@s=substring(col,@start,@step),@len=len(@s),@last_repl=0
from tb
end
go
--显示处理结果
select datalength(col),* from tb
drop table tb
[解决办法]
路过