C114首页 | 新闻 技术 市场 会展 黄页 人物 | 3G NGN VoIP IPTV WiMax FTTH |          通信人家园 | 通信人博客 | 通信商情网 | 通信人才网 | English
近期导读

·营业数据是成功营销前提

·别了,中国联通!

·TD专利费可以省几百亿?

  技术 - 学院 - 网络基础 - 正文
SQL Server 2005 ntext字段的REPLACE处理
 
( 2008/6/12 10:17 )
本文关键字: 测试1

SQL Server2005开发应用实例──ntext字段的REPLACE处理示例:

--测试数据
CREATE TABLE tb(col ntext)
INSERT tb VALUES(REPLICATE( '0001,0002,0003,0004,0005,0006,0007,0008,0009,0100,'
 +'220000001,302000004,500200006,700002008,900002120,',800))
DECLARE @p binary(16)
SELECT @p=TEXTPTR(col) FROM tb
UPDATETEXT tb.col @p NULL 0 tb.col @p
GO

--替换处理定义
DECLARE @s_str nvarchar(1000),@r_str nvarchar(1000)
SELECT @s_str='00'  --要替换的字符串
 ,@r_str='0000'  --替换成该字符串

DECLARE @p varbinary(16)
DECLARE @start int,@s nvarchar(4000),@len int
DECLARE @s_len int,@step int,@last_repl int,@pos int

--替换处理参数设置
SELECT
--用于要判断每次截取数据,最后一个被替换数据位置的处理
@s_len=LEN(@s_str),

--设置每次应该截取的数据的长度,防止REPLACE后数据溢出
@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

作者:Andy   来源:赛迪网
  你是通信人才吗? C114通信人才网
  是通信人才就要上专业通信人才网! 专业、高效、低成本、资源广!
  助你迅速找到满意工作! 拥有中国最全的通信行业人才数据库资源。
C114-AdKey 行业广告系统 
C114 提醒您:1.尊重网上道德,遵守国家的各项法律法规;2.承担一切因为您的行为而导致的相关法律责任;

3.新闻留言板管理人员有权删减留言中的内容;4.您在留言板发表的作品,C114有权站内转载。

[参与本留言即表明您已经阅读并接受上述条款]

 
Copyright©1999-2008 c114 All Right Reserved
上海荧通网络信息技术有限公司版权所有
南方广告业务部: 021-54451141,54451142 E-mail:c114@c114.net
北方广告业务部: 010-63533177,63533977 E-mail:shi@c114.net.cn
编辑部联系:021-54451141,54451142 E-mail:editor@c114.net.cn
服务热线:021-54451141,54451142