Partilhar via


CHAR (Transact-SQL)

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida do Azure SQLAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Ponto de Extremidade de Análise SQL no Microsoft FabricArmazém no Microsoft FabricBase de Dados SQL no Microsoft Fabric

Devolve o carácter de um byte com o código inteiro especificado, conforme definido pelo conjunto de caracteres e codificação da colação padrão da base de dados atual.

Transact-SQL convenções de sintaxe

Sintaxe

CHAR ( integer_expression )

Arguments

integer_expression

Um inteiro de 0 a 255. CHAR devolve um NULL valor para expressões inteiras fora deste intervalo de entrada ou que não representa um carácter completo.

CHAR também devolve um NULL valor quando o carácter excede o comprimento do tipo de retorno.

Muitos conjuntos de caracteres comuns partilham ASCII como subconjunto e retornam o mesmo carácter 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 num esquema de codificação de um byte, mas que requerem codificação multibyte. Para mais informações sobre conjuntos de caracteres, consulte Single-Byte e Conjuntos de Caracteres Multibyte.

Tipos de devolução

char(1)

Observações

Use CHAR para inserir caracteres de controlo em cadeias de caracteres. Esta tabela mostra alguns caracteres de controlo frequentemente usados.

Caráter de controle Valor
Tab char(9)
Espaço char(32)
Alimentação de linha char(10)
Retorno de carro char(13)

Examples

A. Use ASCII e CHAR para imprimir valores ASCII a partir de uma cadeia

Este exemplo imprime o valor ASCII e o carácter de cada carácter na cadeia 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

Aqui está o conjunto de resultados.

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

B. Use CHAR para inserir um carácter de controlo

Este exemplo serve CHAR(13) para imprimir o nome e o endereço de e-mail de um funcionário em linhas separadas, quando a consulta devolve os seus resultados como texto. Este exemplo utiliza a base de dados AdventureWorks2025.

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

Aqui está o conjunto de resultados.

Ken Sanchez
ken0@adventure-works.com

C. Use ASCII e CHAR para imprimir valores ASCII a partir de uma cadeia

Este exemplo assume um conjunto de caracteres ASCII. Devolve o valor do carácter para seis valores diferentes de número de caracteres ASCII.

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];

Aqui está o conjunto de resultados.

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

D. Use CHAR para inserir um carácter de controlo

Este exemplo serve CHAR(13) para devolver informação de sys.databases linhas separadas, quando a consulta devolve os seus resultados como texto.

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

Aqui está 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. Use CHAR para devolver caracteres de um único byte

Este exemplo utiliza os valores inteiros e hexadecimais no intervalo válido para ASCII. A função CHAR consegue gerar o carácter japonês de um byte.

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

Aqui está o conjunto de resultados.

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

F. Use CHAR para devolver caracteres multibyte

Este exemplo utiliza valores inteiros e hexadecimais no intervalo válido para ASCII Estendido. No entanto, a CHAR função retorna NULL porque o parâmetro representa apenas o primeiro byte de um carácter multibyte. Um carácter de dois bytes de char(2 ) não pode ser parcialmente representado nem dividido sem alguma operação de conversão. Os bytes individuais de um carácter de dois bytes geralmente não representam valores válidos de char(1 ).

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

Aqui está o conjunto de resultados.

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

G. Use CONVERT em vez de CHAR para devolver caracteres multibyte

Este exemplo aceita o valor binário como um carácter multibyte codificado, consistente com a página de código padrão da base de dados atual, sujeito a validação. A conversão de caracteres é mais amplamente suportada e pode ser uma alternativa a trabalhar com codificação a um nível mais baixo.

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];

Aqui está o conjunto de resultados.

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

H. Usa NCHAR em vez de CHAR para procurar personagens UTF-8

Este exemplo destaca a distinção que o padrão Unicode faz entre o ponto de código de um carácter e a sequência de unidades de código sob uma dada forma de codificação. O código binário atribuído a um carácter num conjunto clássico de caracteres é o seu único identificador numérico.

Em contraste, a sequência de bytes UTF-8 associada a um carácter é uma codificação algorítmica do seu identificador numérico atribuído: o ponto de código. UTF-8 char e UTF-16 nchar são formas de codificação diferentes que utilizam unidades de código de 8 e 16 bits, do mesmo conjunto de caracteres: a Base 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;

Aqui está o conjunto de resultados. Estes resultados são gerados através de uma _SC colação com suporte suplementar de caracteres.

Nota musical Nota musical (UTF-8) Ponto de Código Bytes UTF-16LE Bytes UTF-8
9835 0x6B26 0xE299AB
🎵 🎵 127925 0x3CD8B5DF 0xF09F8EB5