日期:2014-05-17  浏览次数:20980 次

关于oracle中换行符替换问题
首先说一下我的需求:
表A结构中有一个列是AAA,这是一个varchar2类型列。现在要把表A中的
所有记录中的AAA里面的[cr],[lf]换行符全部替换成[crlf],另外这个AAA中有
[cr],[lf],[crlf]三种混在的情况。

我现在的做法如下
 Cursor cur_aaa is
   Select * from A
   Where A.AAA like ‘%’ || chr(10) || ‘%’
      Or A.AAA like ‘%’ || chr(13) || ‘%’
然后遍历这个游标去更新,用replace替换。
这样是可以替换所有的cr和lf。但是如果AAA中只有[crlf]的话也被替换了,
现在请教各位能否有办法不把AAA中全是[crlf]作为替换对象。求高手指教。
Oracle

------解决方案--------------------
可否变通下:在你做完第一步后,含有[crif]的列会被跟新为[crifcrif],然后你可以做第二步,把这种记录再repalce就行了
------解决方案--------------------
  Select * from A
   Where A.AAA like ‘%’ 
------解决方案--------------------
 chr(10) 
------解决方案--------------------
 ‘%’
      Or A.AAA like ‘%’ 
------解决方案--------------------
 chr(13) 
------解决方案--------------------
 ‘%’
minus
  Select * from A
   Where A.AAA like ‘%’ 
------解决方案--------------------
 chr(10)chr(13) 
------解决方案--------------------
 ‘%’
   
楼主可以使用这个试试,这个应该会查出所有的cr和lf 但是不包含crlf
------解决方案--------------------
一 先把表中[crlf]替换为'*'
二 执行你的操作
三 把'*'替换为[crlf]