Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle regexp_replace trên các từ hoàn chỉnh

Đây là một cách để làm điều này - với một truy vấn đệ quy (yêu cầu Oracle 11.2 trở lên). Đừng mong đợi nó sẽ nhanh.

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. Chế độ xem Vật liệu hóa Oracle với khóa chính

  2. Oracle TNS - không thể kết nối thông qua Quản trị viên ODBC

  3. Oracle:Làm thế nào để biết được có một giao dịch đang chờ xử lý hay không?

  4. Truy vấn phân cấp

  5. Làm thế nào để viết các thủ tục được lưu trữ bằng cách sử dụng các bảng từ một lược đồ khác?