Oracle:替换多个字符串出现

时间:2016-06-14 10:00:38

标签: regex string oracle replace

只需快速检查,是否可以使用单个select语句替换所有匹配项。如果没有,我们计划编写一个函数来替换它。

示例字符串

select '#col1:val1@, #col2:val2@, #col3:val3@, #col4:val4@, #col5:val5@' str from dual

预期输出

str
---
col1 val1, col2 val2, col3 val3, col4 val4, col5 val5
到目前为止

代码

with test_table as 
(Select '#col1:val1@, #col2:val2@, #col3:val3@, #col4:val4@, #col5:val5@' str from dual)

   select level "occurrence", REGEXP_substr(str, '#(.*?):', 1, level, 'in', 1) "column", REGEXP_substr(str, ':(.*?)@', 1, level, 'in', 1) "value"
   from test_table
   CONNECT BY REGEXP_COUNT(str, '#.+?:.+?@') >= level

其他详细信息

  1. 字符串模式已预先修复并已知。
  2. 给定模式的出现是动态的,可能有任意数量的[column:value]对 - 它们实际上是[table column:alias] set。
  3. 为简单起见,我修剪了示例字符串,但它包含其他详细信息(表连接,where子句等),因此我们需要替换所有出现的内容。它实际上是一个选择声明。

2 个答案:

答案 0 :(得分:3)

<强>查询

SELECT REGEXP_REPLACE(
         '#col1:val1@, #col2:val2@, #col3:val3@, #col4:val4@, #col5:val5@',
         '#(.*?):(.*?)@',
         '\1 \2'
       ) AS str
FROM   DUAL

<强>输出

STR
-----------------------------------------------------
col1 val1, col2 val2, col3 val3, col4 val4, col5 val5

答案 1 :(得分:0)

我的尝试:

with test_table as 
(Select '#col1:val1@, #col2:val2@, #col3:val3@,     #col4:val4@, #col5:val5@' str 
 from dual)

select regexp_replace(regexp_replace(str, '[#@]', ''), '[ :]+', ' ') rez 
from test_table
;

内部regexp_replace用#替换#和@(空字符串),外部regexp用一个空格替换:和空格。