CHAR (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de análisis SQL en Microsoft FabricAlmacenamiento en Microsoft Fabric

Devuelve el carácter de un solo byte con el código entero especificado, tal como definen el juego de caracteres y la codificación de la intercalación predeterminada de la base de datos actual.

Convenciones de sintaxis de Transact-SQL

Sintaxis

CHAR ( integer_expression )  

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulta la Documentación de versiones anteriores.

Argumentos

integer_expression
Un entero entre 0 y 255. CHAR devuelve un valor NULL para las expresiones de entero que están fuera de este intervalo de entrada o que no representan un carácter completo. CHAR también devuelve un valor NULL cuando el carácter supera la longitud del tipo de valor devuelto. Muchos juegos de caracteres comunes comparten ASCII como subgrupo y devolverán el mismo carácter para los valores enteros del intervalo de 0 a 127.

Nota

Algunos juegos de caracteres, como Unicode y Shift Japanese Industrial Standards, incluyen caracteres que se pueden representar en un esquema de codificación de byte único, pero requieren una codificación multibyte. Para más información sobre los juegos de caracteres, vea Single-Byte and Multibyte Character Sets.

Tipos de valores devueltos

char(1)

Comentarios

Use CHAR para insertar caracteres de control en las cadenas de caracteres. En esta tabla se muestran algunos caracteres de control usado con frecuencia.

Carácter de control Value
Pestaña char(9)
Avance de línea char(10)
Retorno de carro char(13)

Ejemplos

A. Usar ASCII y CHAR para imprimir los valores ASCII de una cadena

En este ejemplo se imprimen el valor y el carácter ASCII de cada carácter de la cadena New Moon.

SET TEXTSIZE 0;  
-- Create variables for the character string and for the current   
-- position in the string.  
DECLARE @position INT, @string CHAR(8);  
-- Initialize the current position and the string variables.  
SET @position = 1;  
SET @string = 'New Moon';  
WHILE @position <= DATALENGTH(@string)  
   BEGIN  
   SELECT ASCII(SUBSTRING(@string, @position, 1)),   
      CHAR(ASCII(SUBSTRING(@string, @position, 1)))  
   SET @position = @position + 1  
   END;  
GO  

El conjunto de resultados es el siguiente:

----------- -
78          N  
----------- -  
101         e  
----------- -  
119         w  
----------- -  
32  
----------- -  
77          M  
----------- -  
111         o  
----------- -  
111         o  
----------- - 
110         n  

B. Usar CHAR para insertar un carácter de control

En este ejemplo se usa CHAR(13) para imprimir el nombre y la dirección de correo electrónico de un empleado en líneas independientes cuando la consulta devuelve los resultados en formato de texto. En este ejemplo se usa la base de datos AdventureWorks2022.

SELECT p.FirstName + ' ' + p.LastName, + CHAR(13)  + pe.EmailAddress   
FROM Person.Person p 
INNER JOIN Person.EmailAddress pe ON p.BusinessEntityID = pe.BusinessEntityID  
  AND p.BusinessEntityID = 1;  
GO  

El conjunto de resultados es el siguiente:

Ken Sanchez
ken0@adventure-works.com
  
(1 row(s) affected)

C. Usar ASCII y CHAR para imprimir los valores ASCII de una cadena

En este ejemplo se da por hecho que hay un juego de caracteres ASCII. Devuelve el valor de carácter de seis valores numéricos de caracteres ASCII diferentes.

SELECT CHAR(65) AS [65], CHAR(66) AS [66],   
CHAR(97) AS [97], CHAR(98) AS [98],   
CHAR(49) AS [49], CHAR(50) AS [50];  

El conjunto de resultados es el siguiente:

65   66   97   98   49   50  
---- ---- ---- ---- ---- ----  
A    B    a    b    1    2  

D. Usar CHAR para insertar un carácter de control

En este ejemplo se usa CHAR(13) para devolver información de sys.databases en líneas independientes cuando la consulta devuelve sus resultados como texto.

SELECT name, 'was created on ', create_date, CHAR(13), name, 'is currently ', state_desc   
FROM sys.databases;  
GO  

El conjunto de resultados es el siguiente:

name                                      create_date               name                                  state_desc  
--------------------------------------------------------------------------------------------------------------------  
master                    was created on  2003-04-08 09:13:36.390   master                  is currently  ONLINE 
tempdb                    was created on  2014-01-10 17:24:24.023   tempdb                  is currently  ONLINE   
AdventureWorksPDW2012     was created on  2014-05-07 09:05:07.083   AdventureWorksPDW2012   is currently  ONLINE 

E. Usar CHAR para devolver caracteres de byte único

Este ejemplo utiliza valores enteros y hexadecimales en el intervalo válido para ASCII. La función CHAR es capaz de generar el carácter japonés de byte único.

SELECT CHAR(188) AS single_byte_representing_complete_character, 
  CHAR(0xBC) AS single_byte_representing_complete_character;  
GO  

El conjunto de resultados es el siguiente:

single_byte_representing_complete_character single_byte_representing_complete_character
------------------------------------------- -------------------------------------------
シ                                           シ                                         

F. Usar CHAR para devolver caracteres multibyte

Este ejemplo se usan valores enteros y hexadecimales en el intervalo válido para ASCII extendido. Aun así, la función CHAR devuelve NULL porque el parámetro representa solo el primer byte de un carácter multibyte. Un carácter CHAR(2) de doble byte no se puede representar parcialmente ni dividirse sin alguna operación de conversión. Los bytes individuales de un carácter de doble byte no suelen representar valores CHAR(1) válidos.

SELECT CHAR(129) AS first_byte_of_double_byte_character, 
  CHAR(0x81) AS first_byte_of_double_byte_character;  
GO  

El conjunto de resultados es el siguiente:

first_byte_of_double_byte_character first_byte_of_double_byte_character
----------------------------------- -----------------------------------
NULL                                NULL                                         

G. Usar CONVERT en lugar de CHAR para devolver caracteres multibyte

En este ejemplo se acepta el valor binario como un carácter multibyte codificado coherente con la página de código predeterminada de la base de datos actual, sujeto a validación. La conversión de caracteres se admite de forma más amplia y puede ser una alternativa para trabajar con codificación en un nivel inferior.

CREATE DATABASE [multibyte-char-context]
  COLLATE Japanese_CI_AI
GO
USE [multibyte-char-context]
GO
SELECT NCHAR(0x266A) AS [eighth-note]
  , CONVERT(CHAR(2), 0x81F4) AS [context-dependent-convert]
  , CAST(0x81F4 AS CHAR(2)) AS [context-dependent-cast]

El conjunto de resultados es el siguiente:

eighth-note context-dependent-convert context-dependent-cast
----------- ------------------------- ----------------------
♪           ♪                         ♪

H. Usar NCHAR en lugar de CHAR para buscar caracteres UTF-8

En este ejemplo se resalta la distinción que hace el estándar Unicode entre el punto de código de un carácter y la secuencia de unidad de código en un formato de codificación determinado. El código binario asignado a un carácter de un juego de caracteres clásico es su único identificador numérico. Por el contrario, la secuencia de bytes UTF-8 asociada a un carácter es una codificación algorítmica de su identificador numérico asignado: el punto de código. char de UTF-8 y nchar de UTF-16 son formas de codificación diferentes que usan unidades de código de 8 y 16 bits del mismo juego de caracteres: la base de datos de caracteres Unicode.

; WITH uni(c) AS (
    -- BMP character
    SELECT NCHAR(9835)
    UNION ALL
    -- non-BMP supplementary character or, under downlevel collation, NULL
    SELECT NCHAR(127925)
  ),
  enc(u16c, u8c) AS (
    SELECT c, CONVERT(VARCHAR(4), c COLLATE Latin1_General_100_CI_AI_SC_UTF8)
    FROM uni
  )
  SELECT u16c AS [Music note]
    , u8c AS [Music note (UTF-8)]
    , UNICODE(u16c) AS [Code Point]
    , CONVERT(VARBINARY(4), u16c) AS [UTF-16LE bytes]
    , CONVERT(VARBINARY(4), u8c)  AS [UTF-8 bytes]
  FROM enc

El conjunto de resultados es el siguiente: Se generó en una intercalación _SC con compatibilidad con caracteres suplementarios.

Music note Music note (UTF-8) Code Point  UTF-16LE bytes UTF-8 bytes
---------- ------------------ ----------- -------------- -----------
♫          ♫                  9835        0x6B26         0xE299AB
🎵         🎵                 127925      0x3CD8B5DF     0xF09F8EB5

Vea también

ASCII (Transact-SQL)
NCHAR (Transact-SQL)
UNICODE (Transact-SQL)
+ (Concatenación de cadenas) (Transact-SQL)
String Functions (Transact-SQL) [Funciones de cadena (Transact-SQL)]