8. Dezember 2009

Umlaute "normalisieren": NLSSORT

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 ...

Kommentare:

Anonym hat gesagt…

Kann es sein dass die Groß-Kleinschreibung so leider nicht berücksichtigt wird?

Carsten Czarski hat gesagt…

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

Beliebte Postings