UNISTR (Transact-SQL)
适用于:Azure SQL 数据库
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 转义序列的单个字符。 如果未提供,则默认值为 \
。
返回类型
长度和类型的字符串值取决于输入类型。
示例
A. 使用 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
------------------------
はい