NCHAR (Transact-SQL)

根据 Unicode 标准的定义,返回具有指定整数代码的 Unicode 字符。

适用范围:SQL Server(SQL Server 2008 至当前版本),Windows Azure SQL Database(初始版本至当前版本)。

主题链接图标 Transact-SQL 语法约定

语法

NCHAR ( integer_expression )

参数

  • integer_expression
    在数据库的排序规则不包含增补字符 (SC) 标志时,这是从 0 到 65535(0 到 0xFFFF)的正整数。 如果指定的值超出此范围,则返回 NULL。 有关增补字符的详细信息,请参阅排序规则和 Unicode 支持

    在数据库的排序规则支持增补字符 (SC) 标志时,这是从 0 到 1114111(0 到 0x10FFFF)的正整数。 如果指定的值超出此范围,则返回 NULL。

返回类型

nchar(1),当默认数据库排序规则不支持增补字符时。

nvarchar(2),当默认数据库排序规则支持增补字符时。

如果 integer_expression 参数在范围 0 - 0xFFFF 内,则仅返回一个字符。 对于较高的值,NCHAR 返回相应的代理项对。 请勿使用 NCHAR(<High surrogate>) + NCHAR(<Low Surrogate>) 构造代理项对。 而应使用支持增补字符的数据库排序规则,然后为代理项对指定 Unicode 码位。 下面的示例演示构建代理项对的旧式方法以及指定 Unicode 码位的首选方法。

CREATE DATABASE test COLLATE Finnish_Swedish_100_CS_AS_SC;
DECLARE @d nvarchar(10) = N'ㅿ'; 
-– Old style method.
SELECT NCHAR(0xD84C) + NCHAR(0xDD7F); 

-- Preferred method. 
SELECT NCHAR(143743); 

-- Alternative preferred method.
SELECT NCHAR(UNICODE(@d));  

示例

A.使用 NCHAR 和 UNICODE

以下示例使用 UNICODE 和 NCHAR 函数输出 København 字符串中的第二个字符的 UNICODE 值和 NCHAR(Unicode 字符),并输出实际的第二个字符 ø。

DECLARE @nstring nchar(8);
SET @nstring = N'København';
SELECT UNICODE(SUBSTRING(@nstring, 2, 1)), 
   NCHAR(UNICODE(SUBSTRING(@nstring, 2, 1)));
GO

下面是结果集:

----------- - 
248         ø
(1 row(s) affected)

B.使用 SUBSTRING、UNICODE、CONVERT 和 NCHAR

以下示例使用 SUBSTRING、UNICODE、CONVERT 和 NCHAR 函数打印字符串 København 中的字符数、Unicode 字符和每个字符的 UNICODE 值。

-- The @position variable holds the position of the character currently
-- being processed. The @nstring variable is the Unicode character 
-- string to process.
DECLARE @position int, @nstring nchar(9);
-- Initialize the current position variable to the first character in 
-- the string.
SET @position = 1;
-- Initialize the character string variable to the string to process.
-- Notice that there is an N before the start of the string. This 
-- indicates that the data following the N is Unicode data.
SET @nstring = N'København';
-- Print the character number of the position of the string you are at, 
-- the actual Unicode character you are processing, and the UNICODE 
-- value for this particular character.
PRINT 'Character #' + ' ' + 'Unicode Character' + ' ' + 'UNICODE Value';
WHILE @position <= DATALENGTH(@nstring)
   BEGIN
   SELECT @position, 
      NCHAR(UNICODE(SUBSTRING(@nstring, @position, 1))),
      CONVERT(NCHAR(17), SUBSTRING(@nstring, @position, 1)),
      UNICODE(SUBSTRING(@nstring, @position, 1))
   SELECT @position = @position + 1
   END;
GO

下面是结果集:

Character # Unicode Character UNICODE Value
                                               
----------- ---- ----------------- ----------- 
1           K    K                 75

(1 row(s) affected)

                                               
----------- ---- ----------------- ----------- 
2           ø    ø                 248

(1 row(s) affected)

                                               
----------- ---- ----------------- ----------- 
3           b    b                 98

(1 row(s) affected)

                                               
----------- ---- ----------------- ----------- 
4           e    e                 101

(1 row(s) affected)

                                               
----------- ---- ----------------- ----------- 
5           n    n                 110

(1 row(s) affected)

                                               
----------- ---- ----------------- ----------- 
6           h    h                 104

(1 row(s) affected)

                                               
----------- ---- ----------------- ----------- 
7           a    a                 97

(1 row(s) affected)

                                               
----------- ---- ----------------- ----------- 
8           v    v                 118

(1 row(s) affected)

                                               
----------- ---- ----------------- ----------- 
9           n    n                 110

(1 row(s) affected)

                                               
----------- ---- ----------------- ----------- 
10          NULL                   NULL

(1 row(s) affected)

                                               
----------- ---- ----------------- ----------- 
11          NULL                   NULL

(1 row(s) affected)

                                               
----------- ---- ----------------- ----------- 
12          NULL                   NULL

(1 row(s) affected)

                                               
----------- ---- ----------------- ----------- 
13          NULL                   NULL

(1 row(s) affected)

                                               
----------- ---- ----------------- ----------- 
14          NULL                   NULL

(1 row(s) affected)

                                               
----------- ---- ----------------- ----------- 
15          NULL                   NULL

(1 row(s) affected)

                                               
----------- ---- ----------------- ----------- 
16          NULL                   NULL

(1 row(s) affected)

                                               
----------- ---- ----------------- ----------- 
17          NULL                   NULL

(1 row(s) affected)

                                               
----------- ---- ----------------- ----------- 
18          NULL                   NULL

(1 row(s) affected)

请参阅

参考

数据类型 (Transact-SQL)

字符串函数 (Transact-SQL)

UNICODE (Transact-SQL)