UNISTR (Transact-SQL)

适用于:Azure SQL 数据库

UNISTR 通过允许你在字符串中指定字符的 Unicode 编码值,提供对 Unicode 字符串文本的支持。 UNISTR 返回与输入表达式对应的 Unicode 字符,该字符由 Unicode 标准定义。

Unicode 字符的转义序列可以采用或有效 \xxxx UTF-16 代码点值的形式\+xxxxxxxxxx指定,并且xxxxxx是有效的 Unicode 代码点值。 可以在 Unicode 代码图表查找 Unicode 代码点值。

NCHAR等函数相比,UNISTR 提供了更灵活、更全面的方法来处理 Unicode 字符。 例如,虽然 NCHAR 可以将单个 Unicode 值转换为字符,但 UNISTR 处理多个 Unicode 值和转义序列,以便更轻松地处理包含各种 Unicode 字符的复杂字符串。

Transact-SQL 语法约定

语法

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

言论

UNISTR 的主要优势包括:

  • 对 Unicode 转义序列的支持UNISTR 允许你使用转义序列指定 Unicode 字符

  • 输入类型的灵活性UNISTR 支持各种字符类型,例如 charncharvarcharnvarchar。 对于 charvarchar 数据类型,排序规则应该是有效的 UTF-8 排序规则。

  • 自定义转义字符:可以定义自定义转义字符以执行将 Unicode 值转换为字符串字符集的必要转换。

代码页支持

UNISTR 函数与旧代码页不兼容,这意味着它不支持使用非 Unicode 字符集的排序规则。 可以使用以下查询来识别具有旧代码页的这些排序规则。

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/Unicode 映射表附录 H 代码页

参数

character_expression

任何字符类型的表达式,例如 char、ncharvarchar 或 nvarchar 对于 charvarchar 数据类型,排序规则应该是有效的 UTF-8 排序规则。 可以指定字符串文本或 Unicode 或 UTF-16 代码点值,也可以同时指定两者。 character_expression 支持 varchar(max)nvarchar(max)的长度。

N'unicode_escape_character'

表示用户定义的 Unicode 转义序列的单个字符。 如果未提供,则默认值为 \

返回类型

长度和类型的字符串值取决于输入类型。

示例

A. 使用 UNISTR 与 NCHAR 函数

以下示例都使用 UNISTR 函数将 Unicode 值转换为字符串字符集的必要转换,以显示 Unicode 字符笑脸与打开的口角。 如果输入为 char 或 varchar 数据类型,则数据库排序规则必须是 UTF-8 排序规则。

使用 UNISTRNCHAR

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

此示例也可以编写:

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

结果集如下。

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

B. 将 UNISTR 函数与用户定义的转义字符配合使用

以下示例使用 UNISTR 具有自定义转义字符的函数来执行将 Unicode 转换为字符串字符集的必要转换。

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

结果集如下。

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

C. 通过组合字符串文本和 Unicode 码位来使用 UNISTR 函数

在以下示例中,UNISTR 与用户定义的转义字符($)和带有 UTF-8 排序规则的 varchar 数据类型一起使用。 它将字符串文本与 Unicode 代码点值组合在一起:

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

结果集如下。

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

D. 对 UTF-8 限制以外的字符使用 UNISTR 函数

如果需要使用 UTF-8 以外的字符集,则必须使用 COLLATE 子句将字符序列转换为 UTF-8。 下面是一个示例:

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

结果集如下。

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