特別な処理が'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のグローバリゼーション機能のバグなのか、それともこれらの都市名がすべて例外なのかはわかりません。