如何更新具有特定字符串模式/序列的列

时间:2018-06-18 18:12:48

标签: regex plsql oracle11g

我的表中有一列具有类似'A=xxx^B=xxx^C=xxx^D=xxx^'的模式的值我需要将具有此模式的所有列更新为类似'C=xxx^D=xxx^'的模式,其中x是数字。

2 个答案:

答案 0 :(得分:1)

这样的事情有帮助吗? REGEXP_LIKE返回满足条件的行,而普通的SUBSTR返回所需的结果。

SQL> with test (col) as
  2    (select 'A=123^B=123^C=123^D=123^'       from dual union
  3     select 'A=123^B=456^C=789^D=987^'       from dual union
  4     select 'A=333^C=333^D=333^'             from dual union
  5     select 'C=987^D=987^'                   from dual union
  6     select 'B=876^'                         from dual union
  7     select 'A=123^B=123^C=123^D=123^E=123^' from dual
  8    )
  9  select col,
 10    substr(col, instr(col, 'C')) result
 11  from test
 12  where regexp_like(col, '^A=\d+{3}\^B=\d+{3}\^C=\d+{3}\^D=\d+{3}\^$');

COL                            RESULT
------------------------------ ------------------------------
A=123^B=123^C=123^D=123^       C=123^D=123^
A=123^B=456^C=789^D=987^       C=789^D=987^

SQL>

答案 1 :(得分:1)

我设法提出了一个解决方案,因为我正在寻找一个从'A='开始使用 REGEXP_LIKE 来查找特定模式的模式。然后我使用 SUBSTR 从字符串中提取应该从第二个'^'字符开始的值。

Update MYTABLE t set t.key = SUBSTR(t.key,INSTR(t.key,'^',1,2)+1) WHERE REGEXP_LIKE(t.key_ref,'^A=') and t.dno = 'xxxxx';