Of course, you can remove ascent/umlauts from characters.
First of all, look at this example:
with t(n,name) as (
select 1, 'Löwenbrauerei' from dual union all
select 2, 'LÖwenbrauerei' from dual union all
select 3, 'Lowenbrauerei' from dual union all
select 4, 'LOwenbrauerei' from dual
)
select
n
,name
,utl_raw.cast_to_varchar2(nlssort(name, 'NLS_SORT=BINARY_AI')) name_AI
from t;
Results:
N NAME NAME_AI
---------- -------------- --------------------
1 Löwenbrauerei lowenbrauerei
2 LÖwenbrauerei lowenbrauerei
3 Lowenbrauerei lowenbrauerei
4 LOwenbrauerei lowenbrauerei
As you can see NLSSORT(..., 'NLS_SORT=BINARY_AI') removes all ascents and changes all to lower-case characters, so you just need to restore original upper/lower-case characters. For example you can use it with translate:
with t(n,name) as (
select 1, 'Löwenbrauerei' from dual union all
select 2, 'LÖwenbrauerei' from dual union all
select 3, 'Lowenbrauerei' from dual union all
select 4, 'LOwenbrauerei' from dual
)
select
n
,name
,upper(name)
,lower(utl_raw.cast_to_varchar2(nlssort(name, 'NLS_SORT=BINARY_AI'))) name_AI_lower
,upper(utl_raw.cast_to_varchar2(nlssort(name, 'NLS_SORT=BINARY_AI'))) name_AI_upper
,translate(
translate(
name
,upper(name)
,upper(utl_raw.cast_to_varchar2(nlssort(name, 'NLS_SORT=BINARY_AI')))
)
,lower(name)
,utl_raw.cast_to_varchar2(nlssort(name, 'NLS_SORT=BINARY_AI'))
) as name_ascent_removed
from t;
Results:
N NAME UPPER(NAME) NAME_AI_LOWER NAME_AI_UPPER NAME_ASCENT_REMOVED
---------- -------------- -------------- -------------------- -------------------- --------------------------------------------------------
1 Löwenbrauerei LÖWENBRAUEREI lowenbrauerei LOWENBRAUEREI Lowenbrauerei
2 LÖwenbrauerei LÖWENBRAUEREI lowenbrauerei LOWENBRAUEREI LOwenbrauerei
3 Lowenbrauerei LOWENBRAUEREI lowenbrauerei LOWENBRAUEREI Lowenbrauerei
4 LOwenbrauerei LOWENBRAUEREI lowenbrauerei LOWENBRAUEREI LOwenbrauerei
ps. probably you can just to set codepage/font on the client that ignores them...