Udostępnij za pośrednictwem


UNISTR (Transact-SQL)

Dotyczy:azure SQL Database

UNISTR zapewnia obsługę literałów ciągów Unicode, umożliwiając określenie wartości kodowania Unicode znaków w ciągu. UNISTR zwraca znaki Unicode odpowiadające wyrażeniu wejściowemu zgodnie ze standardem Unicode.

Sekwencja ucieczki znaku Unicode może być określona w postaci \xxxx lub \+xxxxxx, gdzie xxxx jest prawidłową wartością punktu kodu UTF-16, a xxxxxx jest prawidłową wartością punktu kodu Unicode. Wartości punktów kodu Unicode można wyszukać na wykresach kodu Unicode .

W porównaniu z funkcjami takimi jak NCHAR, UNISTR zapewnia bardziej elastyczny i kompleksowy sposób obsługi znaków Unicode. Na przykład podczas NCHAR można przekonwertować pojedynczą wartość Unicode na znak, UNISTR obsługuje wiele wartości Unicode i sekwencji ucieczki, co ułatwia pracę ze złożonymi ciągami zawierającymi różne znaki Unicode.

Transact-SQL konwencje składni

Składnia

UNISTR ( 'character_expression' [ , 'unicode_escape_character' ] )

Uwagi

Najważniejsze korzyści z UNISTR obejmują:

  • Obsługa sekwencji ucieczki Unicode: UNISTR umożliwia określanie znaków Unicode przy użyciu sekwencji ucieczki

  • elastyczność z typami wejściowymi: obsługuje różne typy znaków, takie jakznaków, nchar, varchari nvarchar. W przypadku typów danych znaków i varchar sortowanie powinno być prawidłowym sortowaniem UTF-8.

  • niestandardowe znaki ucieczki: można zdefiniować niestandardowy znak ucieczki, aby wykonać niezbędną konwersję wartości Unicode na zestaw znaków ciągu.

Obsługa strony kodowej

Funkcja UNISTR nie jest zgodna ze starszymi stronami kodu, co oznacza, że nie obsługuje sortowania używających zestawów znaków innych niż Unicode. Te sortowania ze starszymi stronami kodu można zidentyfikować przy użyciu następującego zapytania.

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 */
);

Aby uzyskać więcej informacji, zobacz Dodatek G DBCS/Unicode mapowania tabel i dodatek H Code Pages.

Argumenty

'character_expression'

Wyrażenie dowolnego typu znaku, takie jak char, nchar, varcharlub nvarchar. W przypadku typów danych znaków i varchar sortowanie powinno być prawidłowym sortowaniem UTF-8. Można określić literały ciągów lub wartości punktów kodu Unicode lub UTF-16 albo oba te wartości. character_expression obsługuje długość tak dużą, jak varchar(max) i nvarchar(max).

N'unicode_escape_character'

Pojedynczy znak reprezentujący sekwencję ucieczki Unicode zdefiniowaną przez użytkownika. Jeśli nie zostanie podana, wartość domyślna to \.

Typy zwracane

Wartość ciągu, której długość i typ zależą od typów wejściowych.

Przykłady

A. Używanie funkcji UNISTR a NCHAR

W poniższych przykładach wszystkie używają funkcji UNISTR do wykonania niezbędnej konwersji wartości Unicode na zestaw znaków ciągu, aby wyświetlić znak Unicode Uśmiechnięta twarz z otwartymi ustami. Sortowanie bazy danych musi być sortowaniem UTF-8, jeśli dane wejściowe są char lub varchar typów danych.

Używanie UNISTR i NCHAR:

SELECT N'Hello! ' + NCHAR(0xd83d) + NCHAR(0xde00);

Ten przykładowy przykład można również napisać:

SELECT UNISTR(N'Hello! \D83D\DE00');
SELECT UNISTR(N'Hello! \+01F603');

Oto zestaw wyników.

-----------
Hello! 😃

B. Używanie funkcji UNISTR z znakiem ucieczki zdefiniowanym przez użytkownika

W poniższym przykładzie użyto funkcji UNISTR z niestandardowym znakiem ucieczki, aby wykonać niezbędną konwersję Unicode na zestaw znaków ciągu.

SELECT UNISTR(N'ABC#00C0#0181#0187', '#');

Oto zestaw wyników.

-----------
ABCÀƁƇ

C. Używanie funkcji UNISTR przez łączenie literałów ciągów i punktów kodu Unicode

W poniższym przykładzie UNISTR jest używana z zdefiniowanym przez użytkownika znakiem ucieczki ($) i typem danych varchar z sortowaniem UTF-8. Łączy literały ciągów z wartością punktu kodu Unicode:

SELECT UNISTR('I $2665 Azure SQL.' COLLATE Latin1_General_100_CI_AS_KS_SC_UTF8, '$');

Oto zestaw wyników.

------------------
I ♥ Azure SQL.

D. Używanie funkcji UNISTR dla znaków przekraczających limit UTF-8

Jeśli musisz użyć zestawu znaków poza utF-8, musisz przekonwertować sekwencję znaków na UTF-8 przy użyciu klauzuli COLLATE. Oto przykład:

SELECT UNISTR('\306F\3044' COLLATE Latin1_General_100_BIN2_UTF8) AS Yes_in_Japanese_Hiragana;

Oto zestaw wyników.

Yes_in_Japanese_Hiragana
------------------------
はい