NCHAR (Transact-SQL)

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)

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

Transact-SQL 语法约定

语法

NCHAR ( integer_expression )  

参数

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

在数据库的排序规则支持 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

以下示例使用 UNICODENCHAR 函数输出 UNICODE 字符串中的第二个字符的 NCHAR 值和 København(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

以下示例使用 SUBSTRINGUNICODECONVERTNCHAR 函数打印字符串 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)  

另请参阅

ASCII (Transact-SQL)
CHAR (Transact-SQL)
UNICODE (Transact-SQL)
数据类型 (Transact-SQL)
字符串函数 (Transact-SQL)