Ако приемем, че специалната обработка е необходима само за имена като 'S...
, добавяйки прост REPLACE
трябва да работи. Между другото, нямате нужда от две отделни 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 или тези имена на градове са изключения.