替换具有多个逗号的字符串

时间:2014-07-01 04:03:38

标签: sql oracle plsql oracle11g oracle-sqldeveloper

我在下面的列中有这样的数据

可乐

A,B ,, | C,d,E,F |的 L,M ,, | P,Q,R,S

所以这里我想删除Pipe(|)分隔的完整数据,如果它有两个连续的逗号,。

我的输出应该是,

可乐

C,d,E,F | P,Q,R,S

请帮助查询。

2 个答案:

答案 0 :(得分:1)

我将regexp_replace与以下示例

一起使用
SELECT 
 REGEXP_REPLACE('a,b,,|c,d,e,f|l,m,,|p,q,r,s',  --source column
                '.{1,3}(,,\|)',                 --find pattern 
                '',                             --replace with null
                1,                              --start with position number
                0,                              --occurance
               'i')                             --regex match parameter
FROM dual;

答案 1 :(得分:1)

类似的方法,但解决了更多的方案:

SELECT REGEXP_REPLACE('a,b,,|c,d,e,f|l,m,,|p,q,r,s', '^[^|]*,{2,3}[^|]*\|*|\|[^|]*,{2,3}[^|]*' )
FROM dual;

替换正则表达式的组成部分(由交替运算符分隔)

^[^|]*,{2,3}[^|]*\|*左端或只有一个条目

\|[^|]*,{2,3}[^|]*中心(总是取下左管道)

说明:

^是字符串开头的锚点

[^|]是非管道字符

*是0,n量词

{2,3}显式量词匹配2或3次

|交替运算符(或)