sybase數據庫和oracle數據庫中字段中含有換行符的解決辦法

        最近在作數據庫從sybase到oracle的遷移工做,sybase數據庫表bcp導出後,經過sqlldr導入到oracle數據庫,而後oracle數據庫經過spool按照sybase數據庫bcp的格式導出,進行比對,看兩邊的文件是否同樣。可是出現了一個問題,致使兩邊的文件不同,什麼問題了,由於某些表中的某些字段中存在換行符,在sybase中bcp導出時,爲一行,oracle數據庫spool導出爲兩行,致使最後用comm -3比較的時候兩邊文件不同。那麼查詢字段中的值是否有換行符呢?sql

1. sybase查詢表中字段是否有換行符的方法

--sybase數據庫中 ,char(10)表示換行,char(13)表示回車
select   * from  tsysparameter  where c_valuebound like '%'||char(10)||'%' ; 或者: select * from tsysparameter where  charindex(char(10),c_valuebound) > 0; 注意:charindex是前面字符在後面字符是否存在,存在大於0;
也就是說在sybase數據庫中用char(10)表示換行符,用char(13)表示回車。

2. oracle數據庫查詢表中字段是否有換行符的方法:

--oracle數據庫中 ,chr(10)表示換行,chr(13)表示回車
select   * from  tsysparameter  where c_valuebound like '%'||chr(10)||'%' ; 或者: select  * from tsysparameter where  instr(c_valuebound,chr(10))>0;

也就是說在oracle數據庫中用chr(10)表示換行符,用chr(13)表示回車。數據庫

3.sybase 和oracle數據庫更新字段中換行符的方法:

-sybase update tsysparamester set  c_valuebound=str_replace(c_valuebound,char(10),'') where  charindex(char(10),c_valuebound) >0; --oracle
update tsysparamester set  c_valuebound=replace(c_valuebound,chr(10),'') where  instr(c_valuebound,chr(10)) >0;
相關文章
相關標籤/搜索