Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle regexp_replace pada kata-kata lengkap

Inilah salah satu cara untuk melakukannya - dengan kueri rekursif (memerlukan Oracle 11.2 atau lebih tinggi). Jangan berharap itu cepat.

with stg as
(
  select '(ofof+ol)' str from dual union all
  select '(oof+ol+of)'   from dual union all
  select '(*of + 2)'     from dual union all
  select '(of*of + 2)'   from dual 
),
rec ( str, lvl, new_str ) as
(
  select str, 1, upper(str)
    from stg
  union all
  select str, lvl + 1, 
         regexp_replace(new_str, '(\W|^)(OF)(\W|$)', '\1"OF"\3', 1, lvl)
  from   rec
  where  regexp_instr(new_str, '(\W|^)(OF)(\W|$)', 1, lvl) > 0
)
select str, new_str
from   rec
where  regexp_instr(new_str, '(\W|^)(OF)(\W|$)', 1, lvl) = 0
;

STR          NEW_STR          
------------ ------------------
(ofof+ol)    (OFOF+OL)         
(oof+ol+of)  (OOF+OL+"OF")     
(*of + 2)    (*"OF" + 2)       
(of*of + 2)  ("OF"*"OF" + 2)   


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Simpan hasil kueri minus dengan beberapa kolom dalam variabel di Oracle PL/SQL

  2. Parsing string XML yang disimpan di Oracle Table

  3. Memberikan Hak atas Prosedur Tersimpan kepada pengguna Oracle lainnya

  4. Menggunakan NVL untuk beberapa kolom - Oracle SQL

  5. Oracle/SQL:Mengapa kueri SELECT * FROM record WHERE rownum>=5 AND rownum <=10 - mengembalikan nol baris