--测试数据
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

转载于:https://www.cnblogs.com/dushu/archive/2012/05/18/2507713.html

ntext字段的REPLACE处理示例.sql相关推荐

  1. ntext字段的替换处理示例--全表替换

    Mission 1 : 根据需要,将数据库存储文章内容的字段中的域名www.a.com.cn 替换为 www.b.com.cn. 如此典型的问题 先看SQL server的联机手册, USE Nort ...

  2. ntext字段的替换处理示例--全表替换(作者:邹建)

    --ntext字段的替换处理示例--全表替换 --测试数据 create table test(id varchar(3),txt ntext) insert into test select '1' ...

  3. sql 字段内容局部替换, sql删除或替换字段内内容

    因为业务更换了域名,之前上传的 图片路径 webpath需要统一更换 所以我这里使用sql的方法进行替换 update 数据表 set 字段名=replace(字段名,'https://123.bai ...

  4. sql 拼接int类型的字段_这才是SQL优化的正确姿势!

    文末扫海报二维码领[30份Excel可视化数据看板] 磊哥 | 作者 Java中文社群 | 来源 全文内容预览: 当然,本篇是关于性能优化的,那性能优化就应该一把梭子吗?还是要符合一些规范和原则呢? ...

  5. 查询某字段不重复记录的SQL语句

    查询文章信息articleInfo表中的articleAuthor字段不重复记录的SQL如下: SELECT * FROM articleInfo AS A WHERE articleID IN (S ...

  6. mysql分享群_MySQL数据库 字段群组的示例分享

    摘要: 下文讲述MySQL字段群组的示例简介说明,如下所示: 例: drop table if exists T_maomao; create table T_maomao select 'maoma ...

  7. oracle中删除表字段 sql语句怎么写,oracle使用sql语句增加字段示例(sql删除字段语句)...

    添加字段的语法:alter table tablename add (column datatype [default value][null/not null],-.); 修改字段的语法:alter ...

  8. mysql orderby 规则_MySQL中OrderBy多字段排序规则代码示例

    说在前面 突发奇想,想了解一下mysql order by排序是以什么规则进行的? 好了,话不多说,直接进入正题吧. MySql order by 单字段 建一测试表如下: CREATE TABLE ...

  9. 【原创】sql:慎用【数字字段1 - 数字字段2】这样的sql(10-null = null)mysql

    如果只有一个表的情况下 a表: id num1,num2 1 10 5 2 10 0 3 20 0 select id, num1,num2,num1 - num2 AS subNum from a; ...

最新文章

  1. java无阻塞执行脚本,JAVA调用Shell脚本-及阻塞的解决方法
  2. c语言未命名exe,用dev-c++编译出现问题,求大神解答啊
  3. 文件打开不关闭程序会输出吗_干货!很多资深用户都不知道的10个BOOX阅读器使用技巧,很实用!...
  4. angularJs 跨控制器与跨页面传值
  5. Python第一章-基础知识
  6. python在win7中不能运行_Python3.6在win7中无法正常运行的问题
  7. [转]如何使用 DirectX 診斷工具判斷 DirectX 的版本
  8. 20191202_k-中心聚类算法和k-mean算法Python实现
  9. MASM5及LINK命令行
  10. Scala中的Option
  11. 计算机毕业设计Java-超市会员积分管理系统
  12. 请假代码java web_学生请假管理系统
  13. 分享在实际项目中积累的硬件调试经验 - 调试方法,以及常见调试案例
  14. python方差检验分析(ANOVA)
  15. Nature证实:学术界刮起离职潮!大批学者涌向工业界,互助文档日均20个学者离职...
  16. 智能锁忘记密码怎么办
  17. 三、IDEA更换主题皮肤
  18. 乔布斯传阅读体会【持续更新】
  19. 【综述】数学系小白入门图像分割
  20. 每日三个笑话-201510116

热门文章

  1. 在LINUX下安装 Sybase ASE 11.0.3.3
  2. IPV6 IPV4双栈互通与静态路由
  3. python 查找excel内容所在的单元格_python 根据excel单元格内容获取该单元格所在的行号...
  4. python 日志输出变量_python中记录打印的log模块logging的用法实例
  5. cad 打开硬件加速卡_老司机手把手带你解决,各种CAD疑难杂症
  6. 分层架构、六边形架构、CQRS架构模式解读
  7. c#导出Excel及操作
  8. mysql 一行取最大值_mysql 分组取最大值的同时获取包含最大值的行的其他字段
  9. find函数常见错误_终于找到你,查找函数,find必不可少
  10. 当前微型计算机的主存储器可分为,当前微型计算机的主存储器可分为