Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Base de Dados SQL do Azure
Instância Gerida do Azure SQL
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Ponto de Extremidade de Análise SQL no Microsoft Fabric
Armazém no Microsoft Fabric
Base 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 |