我正在努力使用regexp\u replace。目前,我正在尝试处理一个类似于以下字符串的字符串:
ABC|||CDE|||||DEF||||||556|||.|.|
我想要达到的是每个小组只有一个管道。因此,目标字符串是:
ABC|CDE|DEF|556|.|.|
可以使用regexp\u replace或类似的函数来完成吗?怎样?请注意,我无法控制字符串中字符的位置,也不会有模式(例如,“每隔五个字符就有管道”)。我只需要删除即时管道重复。
uidvcgyl1#
使用 REGEXP_REPLACE(value,'(\|)+','|') . 例如
REGEXP_REPLACE(value,'(\|)+','|')
SELECT REGEXP_REPLACE('ABC|||CDE|||||DEF|||||||556||||.|.|','(\|)+','|') newval FROM dual
ttygqcqt2#
当然,正则表达式更漂亮,但是-为了好玩,为了表示好的,古老的 REPLACE 做这个工作。
REPLACE
SQL> select 2 replace( 3 replace( 4 replace('ABC|||CDE|||||DEF|||||||556||||.|.|', --> input string 5 '|', 6 '|' || chr(9) 7 ), 8 chr(9) || '|' 9 ), 10 chr(9), '') result 11 from dual; RESULT -------------------- ABC|CDE|DEF|556|.|.| SQL>
2条答案
按热度按时间uidvcgyl1#
使用
REGEXP_REPLACE(value,'(\|)+','|')
. 例如ttygqcqt2#
当然,正则表达式更漂亮,但是-为了好玩,为了表示好的,古老的
REPLACE
做这个工作。