English title: normalizing "umlauts": The NLSSORT function
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:
Two years ago (time passes by quickly) I had a posting about
Case- and Umlaut-"insensitive" Searches. It was basically about the session-parameters
NLS_SORT and
NLS_COMP which allow linguistic search capabilities within SQL queries. Today I have a very short blog posting about the explicit usage of the
NLSSORT function (the linguistic search uses it implicitly). With NLSSORT you can "normalize" a string value: The string is being converted to lowercase and all umlauts are converted to their base letter. An example:
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.
Since NLSSORT returns a RAW value we cast it to a VARCHAR2:
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 ...
This was useful for me in a specfic situation - perhaps it is also for you ...