NCHAR (Transact-SQL)
Devuelve el carácter Unicode correspondiente al código entero dado, tal como se define en el estándar Unicode.
Se aplica a: SQL Server (SQL Server 2008 a versión actual), Windows Azure SQL Database (Versión inicial a versión actual). |
Convenciones de sintaxis de Transact-SQL
Sintaxis
NCHAR ( integer_expression )
Argumentos
integer_expression
Cuando la intercalación de la base de datos no contiene la marca de carácter complementario (SC), se trata de un número entero positivo de 0 a 65535 (de 0 a 0xFFFF). Si se especifica un valor fuera de este rango, se devuelve NULL. Para obtener más información sobre caracteres complementarios, vea Compatibilidad con la intercalación y Unicode.Cuando la intercalación de la base de datos admite la marca de carácter complementario (SC), se trata de un número entero positivo de 0 a 1114111 (de 0 a 0x10FFFF). Si se especifica un valor fuera de este rango, se devuelve NULL.
Tipos de valor devuelto
nchar(1) cuando la intercalación de la base de datos predeterminada no admite caracteres complementarios.
nvarchar(2) cuando la intercalación de la base de datos predeterminada admite caracteres complementarios.
Si el parámetro integer_expression cae dentro del rango comprendido entre 0 y 0xFFFF, solo se devuelve un carácter. Con valores más altos, NCHAR devuelve el par suplente correspondiente. No cree un par suplente mediante NCHAR(<High surrogate>) + NCHAR(<Low Surrogate>). En su lugar, utilice una intercalación de base de datos que admita caracteres complementarios y después especifique el punto de código Unicode para el par suplente. En el ejemplo siguiente se muestra el método antiguo de creación de un par suplente y el método preferido de especificación del punto de código 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));
Ejemplos
A.Usar NCHAR y UNICODE
En el siguiente ejemplo se utilizan las funciones UNICODE y NCHAR para imprimir el valor UNICODE y NCHAR (carácter Unicode) del segundo carácter de la cadena de caracteres København, y para imprimir el segundo carácter real, ø.
DECLARE @nstring nchar(8);
SET @nstring = N'København';
SELECT UNICODE(SUBSTRING(@nstring, 2, 1)),
NCHAR(UNICODE(SUBSTRING(@nstring, 2, 1)));
GO
El conjunto de resultados es el siguiente.
----------- -
248 ø
(1 row(s) affected)
B.Usar SUBSTRING, UNICODE, CONVERT y NCHAR
En el siguiente ejemplo se utilizan las funciones SUBSTRING, UNICODE, CONVERT y NCHAR para imprimir el número de carácter, el carácter Unicode y el valor de UNICODE para cada uno de los caracteres de la cadena København.
-- 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
El conjunto de resultados es el siguiente.
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)