繁体   English   中英

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

[英]Merge unix/win/mac new lines with update to win new line

我的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)等于胜利+胜利

我尝试了多种不同的陈述,我似乎无法做到正确。

我最好的尝试:

select dump(replace('test1'|| chr(10)||'Test2'|| chr(13)|| chr(10)||'Test3',chr(10),chr(13)|| chr(10)),chr(13)|| chr(10)|| chr(13),chr(13)|| chr(10)),17),来自双重;

你可能有更好的运气使用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和\\ 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   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM