我的表中有一列具有类似'A=xxx^B=xxx^C=xxx^D=xxx^'
的模式的值我需要将具有此模式的所有列更新为类似'C=xxx^D=xxx^'
的模式,其中x是数字。
答案 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';