CHAR (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)Ponto de extremidade de SQL no Microsoft FabricWarehouse no Microsoft Fabric

Retorna o caractere de byte único com o código inteiro especificado, conforme definido pelo conjunto de caracteres e pela codificação da ordenação padrão do banco de dados atual.

Convenções de sintaxe de Transact-SQL

Sintaxe

CHAR ( integer_expression )  

Observação

Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.

Argumentos

integer_expression
Um inteiro de 0 a 255. CHAR retorna um valor de NULL para expressões de inteiro fora deste intervalo de entrada ou que não representa um caractere completo. CHAR também retorna um valor de NULL quando o caractere excede o comprimento do tipo de retorno. Muitos conjuntos de caracteres comuns compartilham ASCII como um subconjunto e retornarão o mesmo caractere para valores inteiros no intervalo de 0 a 127.

Observação

Alguns conjuntos de caracteres, como Unicode e Shift Japanese Industrial Standards, incluem caracteres que podem ser representados em um esquema de codificação de byte único, mas exigem codificação multibyte. Para saber mais sobre conjuntos de caracteres, consulte Conjuntos de caracteres multibyte e de byte único.

Tipos de retorno

char(1)

Comentários

Use CHAR para inserir caracteres de controle em cadeias de caracteres. Esta tabela mostra alguns caracteres de controle usados com frequência.

Caractere de controle Valor
Tab char(9)
Alimentação de linha char(10)
Retorno de carro char(13)

Exemplos

a. Usando ASCII e CHAR para imprimir valores ASCII de uma cadeia de caracteres

Este exemplo imprime o valor e o caractere ASCII para cada caractere na cadeia de caracteres 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  

Este é o conjunto de resultados.

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

B. Usando CHAR para inserir um caractere de controle

Este exemplo usa CHAR(13) para imprimir o nome e o endereço de email de um funcionário em linhas separadas, quando a consulta retorna seus resultados como texto. Este exemplo usa o banco de dados 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  

Este é o conjunto de resultados.

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

C. Usando ASCII e CHAR para imprimir valores ASCII de uma cadeia de caracteres

Este exemplo pressupõe um conjunto de caracteres ASCII. Ele retorna o valor de caractere 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];  

Este é o conjunto de resultados.

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

D. Usando CHAR para inserir um caractere de controle

Este exemplo usa CHAR(13) para retornar informações de sys.databases em linhas separadas, quando a consulta retorna seus resultados como texto.

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

Este é o conjunto de resultados.

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. Como usar CHAR para retornar caracteres de byte único

Este exemplo usa os valores inteiros e hexadecimais no intervalo válido para ASCII. A função CHAR é capaz de gerar o caractere japonês de byte único.

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

Este é o conjunto de resultados.

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

F. Como usar CHAR para retornar caracteres multibyte

Este exemplo usa os valores inteiros e hexadecimais no intervalo válido para ASCII estendido. No entanto, a função CHAR retorna NULL porque o parâmetro representa apenas o primeiro byte de um caractere multibyte. Um caractere de byte duplo CHAR(2) não pode ser parcialmente representado nem dividido sem uma operação de conversão. Os bytes individuais de um caractere de byte duplo geralmente não representam 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  

Este é o conjunto de resultados.

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

G. Como usar CONVERT em vez de CHAR para retornar caracteres multibyte

Este exemplo aceita o valor binário como um caractere multibyte codificado consistente com a página de código padrão do banco de dados atual, sujeito à validação. A conversão de caracteres tem um suporte mais amplo e pode ser uma alternativa para trabalhar com a codificação em um nível 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]

Este é o conjunto de resultados.

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

H. Como usar NCHAR em vez de CHAR para pesquisar caracteres UTF-8

Este exemplo realça a distinção que o padrão Unicode faz entre o ponto de código de um caractere e a sequência de unidade de código em um determinado formulário de codificação. O código binário atribuído a um caractere em um conjunto de caracteres clássico é o único identificador numérico. Por outro lado, a sequência de bytes UTF-8 associada a um caractere é uma codificação de algoritmo do identificador numérico atribuído: o ponto de código. UTF-8 char e UTF-16 nchar são formulários de codificação diferentes que usam unidades de código de 8 bits e de 16 bits, do mesmo conjunto de caracteres: o Banco de dados 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

Este é o conjunto de resultados. Gerado em uma ordenação _SC com suporte a caracteres suplementares.

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

Confira também

ASCII (Transact-SQL)
NCHAR (Transact-SQL)
UNICODE (Transact-SQL)
+ (Concatenação de cadeias de caracteres) (Transact-SQL)
Funções de cadeia de caracteres (Transact-SQL)