我的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 ) 来自双重;
答案 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