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

PL / SQLプロシージャ:大文字の名前をinitcapsに更新し、一部の値を特別に処理します

    特別な処理が'S...のような名前にのみ必要であると仮定します 、単純なREPLACEを追加します 動作するはずです。ところで、2つの別々のUPDATEは必要ありません ステートメント-INITCAP 頭文字以外の文字を自動的に小文字に変換します。:

    with v_data(name) as (
      select 'AMSTERDAM' from dual union all
      select '''S GRAVENHAGE' from dual union all
      select 'DEN HAAG' from dual union all
      select 'IJSLAND' from dual
      )
    select 
      replace(nls_initcap(name, 'NLS_SORT=xDutch'), '''S', '''s') name
    from v_data
    
    Name
    ----
    Amsterdam
    's Gravenhage
    Den Haag
    IJsland
    

    これにより、'Sのすべての出現箇所が置き換えられます 'sを使用 。他のケースも処理する必要がある場合は、REGEXP_REPLACE()を試してみることをお勧めします。 。

    関数 NLS_INITCAP いくつかのグローバリゼーションの問題に役立ちます。たとえば、Iの両方を大文字にします およびJ IJSLANDで 。しかし、それは'Sには役立ちません 名前。それがOracleのグローバリゼーション機能のバグなのか、それともこれらの都市名がすべて例外なのかはわかりません。



    1. SQLでの日時から合計分まで

    2. getReadableDatabase()を呼び出すときのNullポインタ例外

    3. mysqlクエリは時々何も返さない

    4. 大文字化を自動化できる列を定義するにはどうすればよいですか?