[英]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.