Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle regexp_replace на цели думи

Ето един начин да направите това - с рекурсивна заявка (изисква Oracle 11.2 или по-нова версия). Не очаквайте да е бързо.

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. Как да излекувам причината за изключението при хибернация, възникнало IllegalArgumentException при извикване на сетера?

  2. Вземете ID на последния вмъкнат запис в oracle db

  3. как да изберете дори записи от таблица в oracle?

  4. Лоша практика ли е да се използва инструкция EXIT WHEN, когато преминавате през CURSOR в Oracle?

  5. Как да съкратим таблицата в процедурата на Oracle?