UNISTR (Transact-SQL) 预览版

适用于:SQL Server 2025 (17.x) 在Microsoft Fabric 中预览 Azure SQL 数据库Azure SQL 托管实例 SQL 数据库

注释

作为预览版功能,本文中介绍的技术受制于 Microsoft Azure 预览版补充使用条款

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 转义序列的单个字符。 如果未提供,则默认值为 \

返回类型

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

示例

答: 使用 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
------------------------
はい