sql >> データベース >  >> RDS >> Oracle

完全な単語に対する Oracle regexp_replace

    これを行う 1 つの方法を次に示します。再帰クエリを使用します (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. GROUPBYとORDERBY

    2. PHP-ラジオボタンをクリックしたときにデータをMySQLに更新する方法

    3. 年、月、日から日付を作成する

    4. コピーのためのpostgreswindowsシステム権限の提供(windows 8)