Umlaute "normalisieren": NLSSORT
Bereits vor zwei Jahren (beim Bloggen vergeht die Zeit doch recht schnell) hatte ich ein Posting über Case- und Umlaut-"insensitive" Suche veröffentlicht. Darin ging es im wesentlichen um die Verwendung der Session-Parameter NLS_SORT und NLS_COMP. Damit ist linguistischen Suche möglich. Heute möchte ich (in einem kurzen Blog-Posting) zeigen, wie man mit expliziter Verwendung der Funktion NLSSORT (diese wird bei der linguistischen Suche implizit genutzt) Strings "normalisieren" kann. Ein Beispiel:
select nlssort('München á la Carte - and ...: ê,á,ß,ö', 'nls_sort=''binary_ai''') NORMALIZED
from dual
/
NORMALIZED
------------------------------------------------------------------------------
6D756E6368656E2061206C61206361727465202D20616E64202E2E2E3A20652C612C73732C6F00
Die Funktion NLSSORT gibt einen RAW zurück; um zu sehen, was da drin steckt, wandeln
wir es mit UTL_RAW.CAST_TO_VARCHAR2 wieder um.
select utl_raw.cast_to_varchar2(
nlssort('München á la Carte - and ...: ê,á,ß,ö', 'nls_sort=''binary_ai''')
) NORMALIZED
from dual
/
NORMALIZED
----------------------------------------------
munchen a la carte - and ...: e,a,ss,o
Ich konnte das in einem konkreten Fall schon brauchen - vielleicht auch für euch ...
Kommentare:
Kann es sein dass die Groß-Kleinschreibung so leider nicht berücksichtigt wird?
Hallo,
das ist richtig; sobald man die linguistischen Features nutzt, wird die Suche Case-Insensitiv. In fast allen Fällen wird das ja auch so gewünscht.
Beste Grüße
-Carsten
Kommentar veröffentlichen