UNISTR (Transact-SQL)
Gilt für: Azure SQL-Datenbank
UNISTR
bietet Unterstützung für Unicode-Zeichenfolgenliterale, indem Sie den Unicode-Codierungswert von Zeichen in der Zeichenfolge angeben können.
UNISTR
gibt die Unicode-Zeichen zurück, die dem Eingabeausdruck entsprechen, wie vom Unicode-Standard definiert.
Die Escapesequenz für ein Unicode-Zeichen kann in Form oder \xxxx
\+xxxxxx
angegeben werden, wobei xxxx
es sich um einen gültigen UTF-16-Codepointwert handelt und xxxxxx
ein gültiger Unicode-Codepointwert ist. Sie können Unicode-Codepointwerte in den Unicode-Codediagrammen nachschlagen.
Im Vergleich zu Funktionen wie NCHAR
bietet UNISTR
eine flexiblere und umfassendere Möglichkeit, Unicode-Zeichen zu verarbeiten. Während NCHAR
z. B. einen einzelnen Unicode-Wert in ein Zeichen konvertieren kann, behandelt UNISTR
mehrere Unicode-Werte und Escapesequenzen und erleichtert die Arbeit mit komplexen Zeichenfolgen, die verschiedene Unicode-Zeichen enthalten.
Transact-SQL-Syntaxkonventionen
Syntax
UNISTR ( 'character_expression' [ , 'unicode_escape_character' ] )
Bemerkungen
Zu den wichtigsten Vorteilen UNISTR
gehören:
Unterstützung für Unicode-Escapesequenzen: mit
UNISTR
können Sie Unicode-Zeichen mithilfe von Escapesequenzen angeben.Flexibilität bei Eingabetypen:
UNISTR
unterstützt verschiedene Zeichentypen wie Zeichen, nchar, varcharund nvarchar. Bei Char - und Varchar-Datentypen sollte die Sortierung eine gültige UTF-8-Sortierung sein.Benutzerdefinierte Escapezeichen: Sie können ein benutzerdefiniertes Escapezeichen definieren, um die erforderliche Konvertierung von Unicode-Werten in einen Zeichenfolgenzeichensatz auszuführen.
Unterstützung von Codeseiten
Die UNISTR
-Funktion ist nicht mit älteren Codeseiten kompatibel. Dies bedeutet, dass keine Sortierungen unterstützt werden, die Nicht-Unicode-Zeichensätze verwenden. Diese Sortierungen mit älteren Codeseiten können mithilfe der folgenden Abfrage identifiziert werden.
SELECT DISTINCT p.language,
p.codepage
FROM sys.fn_helpcollations() AS c
CROSS APPLY (VALUES (LEFT(c.name, CHARINDEX('_', c.name) - 1),
COLLATIONPROPERTY(c.name, 'codepage'))) AS p(language, codepage)
WHERE p.codepage NOT IN (
0 /* Unicode Only collation */,
65001 /* UTF-8 code page */
);
Weitere Informationen finden Sie in Anhang G DBCS/Unicode-Zuordnungstabellen und Anhang H Code Pages.
Argumente
"character_expression"
Ein Ausdruck eines beliebigen Zeichentyps, z . B. Char, nchar, varchar oder nvarchar. Bei Char - und Varchar-Datentypen sollte die Sortierung eine gültige UTF-8-Sortierung sein. Sie können entweder Zeichenfolgenliterale oder Unicode- oder UTF-16-Codepunktwerte oder beides angeben.
character_expression
unterstützt eine länge so groß wie varchar(max) und nvarchar(max).
N'unicode_escape_character'
Ein einzelnes Zeichen, das eine benutzerdefinierte Unicode-Escapesequenz darstellt. Wenn nicht angegeben, lautet \
der Standardwert .
Rückgabetypen
Ein Zeichenfolgenwert, dessen Länge und Typ von den Eingabetypen abhängig sind.
Beispiele
A. Verwenden von UNISTR im Vergleich zur NCHAR-Funktion
In den UNISTR
folgenden Beispielen werden alle Funktionen verwendet, um die erforderliche Konvertierung der Unicode-Werte in Zeichenfolgenzeichensatz auszuführen, um das Unicode-Zeichen "Lächelndes Gesicht mit geöffneter Mund" anzuzeigen. Die Datenbanksortierung muss eine UTF-8-Sortierung sein, wenn es sich bei der Eingabe um Zeichen - oder Varchar-Datentypen handelt.
Verwenden von UNISTR
und NCHAR
:
SELECT N'Hello! ' + NCHAR(0xd83d) + NCHAR(0xde00);
Dieses Beispiel kann auch geschrieben werden:
SELECT UNISTR(N'Hello! \D83D\DE00');
SELECT UNISTR(N'Hello! \+01F603');
Hier sehen Sie das Ergebnis.
-----------
Hello! 😃
B. Verwenden der UNISTR-Funktion mit benutzerdefiniertem Escapezeichen
Im folgenden Beispiel wird die UNISTR
Funktion mit einem benutzerdefinierten Escapezeichen verwendet, um die erforderliche Konvertierung des Unicode in einen Zeichenfolgenzeichensatz durchzuführen.
SELECT UNISTR(N'ABC#00C0#0181#0187', '#');
Hier sehen Sie das Ergebnis.
-----------
ABCÀƁƇ
C. Verwenden der UNISTR-Funktion durch Kombinieren von Zeichenfolgenliteralen und Unicode-Codepunkten
Im folgenden Beispiel wird UNISTR
mit einem benutzerdefinierten Escapezeichen ($
) und einem varchar- Datentyp mit UTF-8-Sortierung verwendet. Es kombiniert Zeichenfolgenliterale mit einem Unicode-Codepointwert:
SELECT UNISTR('I $2665 Azure SQL.' COLLATE Latin1_General_100_CI_AS_KS_SC_UTF8, '$');
Hier sehen Sie das Ergebnis.
------------------
I ♥ Azure SQL.
D. Verwenden der UNISTR-Funktion für Zeichen außerhalb des UTF-8-Grenzwerts
Wenn Sie einen Zeichensatz über UTF-8 hinaus verwenden müssen, müssen Sie die Zeichensequenz mithilfe der COLLATE
-Klausel in UTF-8 konvertieren. Hier ist ein Beispiel:
SELECT UNISTR('\306F\3044' COLLATE Latin1_General_100_BIN2_UTF8) AS Yes_in_Japanese_Hiragana;
Hier sehen Sie das Ergebnis.
Yes_in_Japanese_Hiragana
------------------------
はい