我在oracle论坛站点上找到了一个示例:

输入字符串:a, b, c (x, y, z), a, (xx, yy, zz), x,

WITH t AS (SELECT 'a, b, c (x, y, z), a, (xx, yy, zz), x,' col1
         FROM dual)
SELECT t.col1
 , REGEXP_REPLACE(t.col1, '(\(.*?\))|,', '\1') new_col
FROM t

输出:a b c (x, y, z) a (xx, yy, zz) x
但我想与此相反。只需从,内部删除此字符()并保留在外部即可。

输出:a, b, c (x y z), a, (xx yy zz), x,

最佳答案

这适用于括号内带有固定长度的参数。

REGEXP_REPLACE(t.col1, '(\(.*?),(.*?),(.*?\))', '\1\2\3') new_col

更新来自@Kobi的评论:
此正则表达式删除,之间的第一,可选第二和可选第三()最多可以扩展到9(我有一个book指出\1 ...\500应该可以,但只有\1 ...\9有效)
REGEXP_REPLACE(t.col1, '\(([^,]*),([^,]*),?([^,]*),?([^,]*)\)', '(\1\2\3\4)') new_col

关于sql - REGEXP_REPLACE-仅当包含在()中时,才从字符串中删除逗号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6826781/

10-16 11:09