Поделиться через


UNISTR (Transact-SQL)

Применимо к: База данных SQL Azure

UNISTR обеспечивает поддержку строковых литералах Юникода, позволяя указать значение кодировки Юникода символов в строке. UNISTR возвращает символы Юникода, соответствующие входным выражениям, как определено стандартом Юникода.

Escape-последовательность для символа Юникода может быть указана в виде \xxxx или \+xxxxxx, где xxxx допустимое значение точки кода UTF-16 и xxxxxx является допустимым значением кодовой точки Юникода. Значения точек кода Юникода можно найти в диаграммах кода Юникода.

По сравнению с такими функциями, как NCHAR, UNISTR обеспечивает более гибкий и комплексный способ обработки символов Юникода. Например, в то время как NCHAR может преобразовать одно значение Юникода в символ, UNISTR обрабатывает несколько значений Юникода и escape-последовательностей, что упрощает работу со сложными строками, включающими различные символы Юникода.

Соглашения о синтаксисе Transact-SQL

Синтаксис

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

Замечания

К ключевым преимуществам UNISTR относятся:

  • Поддержка escape-последовательностей Юникода: UNISTR позволяет указывать символы Юникода с помощью escape-последовательностей

  • Гибкость с типами ввода: UNISTR поддерживает различные типы символов, такие как char, nchar, varcharи nvarchar. Для типов данных char и varchar параметры сортировки должны быть допустимыми параметрами сортировки UTF-8.

  • Пользовательские escape-символы: можно определить пользовательский escape-символ для выполнения необходимого преобразования значений Юникода в строковый набор символов.

Поддержка кодовой страницы

Функция UNISTR несовместима с устаревшими кодовых страницами, т. е. не поддерживает параметры сортировки, использующие наборы символов, отличных от Юникода. Эти параметры сортировки с устаревшими кодовых страницами можно определить с помощью следующего запроса.

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

Дополнительные сведения см. в приложении G DBCS/Юникод сопоставления таблиц и приложения H Code Pages.

Аргументы

"character_expression"

Выражение любого типа символа, например char, nchar, varchar или nvarchar. Для типов данных char и varchar параметры сортировки должны быть допустимыми параметрами сортировки UTF-8. Можно указать строковые литералы или значения точек кода Юникода или UTF-16 или обоих. character_expression поддерживает длину как varchar(max) и nvarchar(max).

N'unicode_escape_character'

Один символ, представляющий определяемую пользователем последовательность escape-кода Юникода. Если этот параметр не указан, значение по умолчанию равно \.

Типы возвращаемых данных

Строковое значение, длина и тип которого зависят от типов входных данных.

Примеры

А. Использование ЮНИСТР и функции NCHAR

В следующих примерах все функции используются UNISTR для выполнения необходимого преобразования значений Юникода в строковый набор символов, чтобы отобразить символ юникода, улыбающийся лицом с открытым ротом. Параметры сортировки базы данных должны быть параметрами сортировки UTF-8, если входные данные являются типами данных char или varchar .

При использовании UNISTR и NCHAR:

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

Этот пример также можно записать:

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

Вот результирующий набор.

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

B. Использование функции UNISTR с определяемым пользователем escape-символом

В следующем примере функция используется UNISTR с пользовательским escape-символом для выполнения необходимого преобразования Юникода в строковый набор символов.

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

Вот результирующий набор.

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

C. Использование функции UNISTR путем объединения строковых литералом и точек кода Юникода

В следующем примере UNISTR используется с определяемым пользователем escape-символом ($) и типом данных varchar varchar с параметрами сортировки UTF-8. Он объединяет строковые литералы со значением codepoint Юникода:

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

Вот результирующий набор.

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

D. Использование функции UNISTR для символов за пределами ограничения UTF-8

Если необходимо использовать набор символов за пределами UTF-8, необходимо преобразовать последовательность символов в UTF-8 с помощью предложения COLLATE. Ниже приведен пример:

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

Вот результирующий набор.

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