合并unix / win / mac新行与更新以赢得新行

时间:2016-05-03 11:42:35

标签: windows oracle macos unix

我的oracle数据库中有一个列,它通过OS独立的应用程序用户界面(unix / win / osx)填充。 由于不同操作系统中的复制粘贴,我的列中有多个不同的新行(chr(10),chr(13)|| chr(10),chr(13))。

我现在需要做的是: 将所有不同的新行更新为一个,即windows:chr(13)|| chr(10)。 虽然列中新行的数量必须保持不变! 最大的问题是,新行也可以在同一个单元格中。所以我们也可以 chr(10)|| chr(13)|| chr(10)等于unix + win 这应该导致: chr(13)|| chr(10)|| chr(13)|| chr(10)等于win + win

我尝试了多种不同的陈述,我似乎无法做到这一点。

我最好的尝试:

  

选择   转储(更换(替换('测试1' || CHR(10)||' Test2的' || CHR(13)|| CHR(10)||' Test3的&# 39;,CHR(10),CHR(13)|| CHR(10)),CHR(13)|| CHR(10)|| CHR(13),CHR(13)|| CHR(10)),17 )   来自双重;

1 个答案:

答案 0 :(得分:0)

使用regexp_replace

可能会有更好的运气

根据以下评论中的数据..请参阅以下内容

with testdata as(
SELECT  'Test1'||chr(10)||'Test2'||chr(13)||chr(10)||'Test3' A, 'Test1'||chr(13)||chr(10)||'Test2'||chr(13)||chr(10)||'Test3' b FROM dual
UNION ALL
SELECT 'Test1'||chr(13)||'Test2'||chr(13)||chr(10)||'Test3' A,  'Test1'||chr(13)||chr(10)||'Test2'||chr(13)||chr(10)||'Test3' b FROM dual
UNION ALL
SELECT 'Test1'||chr(10)||chr(13)||chr(10)||'Test3' A, 'Test1'||chr(13)||chr(10)||chr(13)||chr(10)||'Test3' FROM dual
)
,re as (
SELECT A  src, b tgt
, REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(A, '('||chr(13)||chr(10)||'+)', chr(7),1,0,'m'), '['||chr(10)||chr(13)||']', chr(7)), chr(7), chr(13)||chr(10) ) newsrc
FROM testdata)
SELECT DUMP(src, 17) src, DUMP(tgt, 17)  tgt, DUMP(newsrc,17) newsrc
,(case when newsrc = tgt then 'MATCH' else 'NONMATCH' end) matching
from re;

我用chr(7)替换windows换行符然后用chr(7)替换剩余的\ r' s和\ n&n; 最后将所有chr(7)转换回\ r \ n

它可以适用于您的测试数据...

SRC                                                          TGT                                                          NEWSRC                                                       MATCHING
------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ --------
Typ=1 Len=18: T,e,s,t,1,^J,T,e,s,t,2,^M,^J,T,e,s,t,3         Typ=1 Len=19: T,e,s,t,1,^M,^J,T,e,s,t,2,^M,^J,T,e,s,t,3      Typ=1 Len=19: T,e,s,t,1,^M,^J,T,e,s,t,2,^M,^J,T,e,s,t,3      MATCH   
Typ=1 Len=18: T,e,s,t,1,^M,T,e,s,t,2,^M,^J,T,e,s,t,3         Typ=1 Len=19: T,e,s,t,1,^M,^J,T,e,s,t,2,^M,^J,T,e,s,t,3      Typ=1 Len=19: T,e,s,t,1,^M,^J,T,e,s,t,2,^M,^J,T,e,s,t,3      MATCH   
Typ=1 Len=13: T,e,s,t,1,^J,^M,^J,T,e,s,t,3                   Typ=1 Len=14: T,e,s,t,1,^M,^J,^M,^J,T,e,s,t,3                Typ=1 Len=14: T,e,s,t,1,^M,^J,^M,^J,T,e,s,t,3                MATCH