适用于:SQL Server 2025 (17.x) 在
Microsoft Fabric 中预览
Azure SQL 数据库
Azure SQL 托管实例 SQL 数据库
注释
作为预览版功能,本文中介绍的技术受制于 Microsoft Azure 预览版补充使用条款。
UNISTR
通过允许你在字符串中指定字符的 Unicode 编码值,提供对 Unicode 字符串文本的支持。
UNISTR
返回与输入表达式对应的 Unicode 字符,该字符由 Unicode 标准定义。
Unicode 字符的转义序列可以采用或有效 \xxxx
UTF-16 代码点值的形式\+xxxxxx
xxxx
指定,并且xxxxxx
是有效的 Unicode 代码点值。 可以在 Unicode 代码图表中查找 Unicode 代码点值。
与 NCHAR
等函数相比,UNISTR
提供了更灵活、更全面的方法来处理 Unicode 字符。 例如,虽然 NCHAR
可以将单个 Unicode 值转换为字符,但 UNISTR
处理多个 Unicode 值和转义序列,以便更轻松地处理包含各种 Unicode 字符的复杂字符串。
语法
UNISTR ( 'character_expression' [ , 'unicode_escape_character' ] )
言论
UNISTR
的主要优势包括:
对 Unicode 转义序列的支持:
UNISTR
允许你使用转义序列指定 Unicode 字符输入类型的灵活性:
UNISTR
支持各种字符类型,例如 char、nchar、varchar和 nvarchar。 对于 char 和 varchar 数据类型,排序规则应该是有效的 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、nchar、varchar 或 nvarchar。 对于 char 和 varchar 数据类型,排序规则应该是有效的 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 排序规则。
使用 UNISTR
和 NCHAR
:
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
------------------------
はい