我在下面的列中有这样的数据
可乐
A,B ,, | C,d,E,F |的 L,M ,, | P,Q,R,S
所以这里我想删除Pipe(|)分隔的完整数据,如果它有两个连续的逗号,。
我的输出应该是,
可乐
C,d,E,F | P,Q,R,S
请帮助查询。
答案 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次
|
交替运算符(或)