zoukankan      html  css  js  c++  java
  • Text类型的字段进行数据替换

    一、text不大于8000

      varchar和nvarchar类型是支持replace函数的,所以如果你的text不超过8000,可以先转换成前面两种类型再使用replace。

    UPDATE News SET CONTENT=replace(cast(CONTENT as varchar(max)),'http://192.168.0.111/','') 

    二、text大于8000

    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 

      上面说的是针对ntext字段的替换处理,如果要处理text字段,只需要先转换成ntext字段然后保存在临时表里面,处理完以后再从临时表写回text就行了。
      其实一般象text,ntext字段这些都是抓到程序里面去处理的。

  • 相关阅读:
    tcpcopy用法
    iptable用法
    svn回滚
    J.U.C CAS
    J.U.C JMM. pipeline.指令重排序,happen-before(续)
    J.U.C JMM. pipeline.指令重排序,happen-before(续MESI协议)
    J.U.C JMM. pipeline.指令重排序,happen-before
    J.U.C atomic 数组,字段原子操作
    J.U.C atomic AtomicInteger解析
    J.U.C FutureTask之源码解析
  • 原文地址:https://www.cnblogs.com/AngelLee2009/p/3208244.html
Copyright © 2011-2022 走看看