Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

NORMALIZE() - National-Zeichenkette in Normalform bringen

Funktionsgruppe: Zeichenkettenfunktion

Die Codierung eines Zeichens in Unicode ist nicht eindeutig, d.h. es kann für ein Zeichen mehr als eine Codierung geben, siehe „ Basishandbuch“.

Ein typisches Beispiel sind die deutschen Umlaute. Beispielsweise hat das Zeichen Ä sowohl den Code Point U+00C4 (composed form) als auch die Code Point-Kombination U+0041 und U+0308 (decomposed form). In normalisierten Darstellungsformen treten diese Unterschiede nicht auf. Wenn zwei normalisierte Zeichenketten unterschiedlich sind, dann sind es auch ihre unterschiedlichen Code Point-Darstellungen.

NORMALIZE() bringt eine National-Zeichenkette mit National-Zeichen, die Code Points im Bereich U+0000 bis U+2FFF besitzen, in eine normalisierte Form. Andere Zeichen, z.B. Surrogates, bleiben unverändert.


NORMALIZE ( ausdruck [,{ NFC | NFD } [, länge ]])

länge ::= vorzeichenlose_ganzzahl



ausdruck

National-Ausdruck. Seine Auswertung ergibt eine National-Zeichenkette (Datentyp NCHAR oder NVARCHAR) in normalisierter Form.
ausdruck darf kein multipler Wert mit Dimension > 1 sein.


NFC | NFD

Normalisierungsformen C („Canonical Decomposition followed by Canonical Composition“) bzw. D („Canonical Decomposition“) des Unicode-Standards.

NFC bildet alle Code Points, die zusammen ein Zeichen ergeben, in den entsprechenden Code Point ab. NFD zerlegt jedes „zusammengesetzte“ Zeichen in seine einzelnen Bestandteile, in das Grundzeichen und in die damit verknüpften diakritischen Zeichen. Die Reihenfolge der verknüpften diakritischen Zeichen ist dabei streng festgelegt.


länge

Maximale Länge der normalisierten Darstellung in Code Units.

Länge nicht angegeben:
Das Ergebnis kann abhängig von ausdruck bis zu 16000 Code Units lang werden.


Ergebnis

Wenn der Wert von ausdruck der NULL-Wert ist, dann ist das Ergebnis der NULL-Wert.

Sonst:

Die normalisierte Darstellung des Wertes von ausdruck.
Es gilt: Länge der normalisierten Darstellung (NFC) <= Länge der nicht normalisierten Darstellung <= Länge der normalisierte Darstellung (NFD).
Wenn die Länge der normalisierten Darstellung größer ist als die angegebene länge, dann wird die Funktion mit SQLSTATE abgebrochen.


Datentyp: NVARCHAR( MIN(2*n,16000) ),
wobei n die Länge des Argumentdatentyps NCHAR(n) bzw. NVARCHAR(n) ist.Auch für ein Argument vom Typ NCHAR ist der Datentyp NVARCHAR.


Beispiel

Folgende Suchbedingung normalisiert einen Benutzernamen, um unerwünschte Benutzer, die sich in unterschiedlichen Darstellungsformen anmelden, zu erkennen.

... WHERE NORMALIZE(:kunde,NFC)

          NOT IN (SELECT name FROM unerwünschte_kunden)