当然,您可以从字符中删除上升/元音变音。
首先看这个例子:
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;
结果:
N NAME NAME_AI
---------- -------------- --------------------
1 Löwenbrauerei lowenbrauerei
2 LÖwenbrauerei lowenbrauerei
3 Lowenbrauerei lowenbrauerei
4 LOwenbrauerei lowenbrauerei
如您所见,NLSSORT(..., 'NLS_SORT=BINARY_AI') 删除了所有上升并全部更改为小写字符,因此您只需恢复原始的大写/小写字符。例如,您可以将其与 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;
结果:
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。也许您可以在忽略它们的客户端上设置代码页/字体...