CHAR (Transact-SQL)

Si applica a:SQL Server database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics AnalyticsPlatform System (PDW)SQL analytics endpoint in Microsoft FabricWarehouse in Microsoft Fabric

Restituisce il carattere a byte singolo con il codice integer specificato, come definito dal set di caratteri e dalla codifica delle regole di confronto predefinite del database corrente.

Convenzioni di sintassi Transact-SQL

Sintassi

CHAR ( integer_expression )  

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere la documentazione delle versioni precedenti.

Argomenti

integer_expression
Valore intero compreso tra 0 e 255. CHAR restituisce un valore NULL per le espressioni integer esterne a questo intervallo di input o che non rappresentano un carattere completo. CHAR restituisce anche un valore NULL quando il carattere supera la lunghezza del tipo restituito. Molti set di caratteri comuni condividono ASCII come sottoinsieme e restituiranno lo stesso carattere per i valori integer nell'intervallo compreso tra 0 e 127.

Nota

Alcuni set di caratteri, tra cui Unicode e Shift Japanese Industrial Standards, includono caratteri che possono essere rappresentati in uno schema di codifica a byte singolo, ma richiedono la codifica multibyte. Per altre informazioni sui set di caratteri, vedere Set di caratteri a byte singolo e multibyte.

Tipi restituiti

char(1)

Osservazioni:

Usare la funzione CHAR per inserire caratteri di controllo nelle stringhe di caratteri. In questa tabella sono elencati i caratteri di controllo usati più di frequente.

Carattere di controllo valore
Tab char(9)
Avanzamento riga char(10)
Ritorno a capo char(13)

Esempi

R. Utilizzo di ASCII e CHAR per stampare valori ASCII da una stringa

In questo esempio viene stampato il valore e il carattere ASCII di ogni carattere della stringa 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  

Questo è il set di risultati.

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

B. Utilizzo della funzione CHAR per inserire un carattere di controllo

In questo esempio si usa CHAR(13) per stampare nome e indirizzo di posta elettronica di un dipendente su righe diverse quando i risultati della query vengono restituiti in formato testo. In questo esempio viene utilizzato il database 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  

Questo è il set di risultati.

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

C. Utilizzo di ASCII e CHAR per stampare valori ASCII da una stringa

Questo esempio presuppone che si usi un set di caratteri ASCII. Restituisce il valore del carattere per sei diversi valori numerici 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];  

Questo è il set di risultati.

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

D. Utilizzo della funzione CHAR per inserire un carattere di controllo

In questo esempio viene usato CHAR(13) per restituire le informazioni di sys.databases su righe separate quando la query restituisce i risultati in formato testo.

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

Questo è il set di risultati.

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. Uso di CHAR per restituire caratteri a byte singolo

Questo esempio usa valori interi ed esadecimali nell'intervallo valido per ASCII. La funzione CHAR è in grado di restituire il carattere giapponese a byte singolo.

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

Questo è il set di risultati.

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

F. Uso di CHAR per restituire caratteri multibyte

Questo esempio usa valori interi ed esadecimali nell'intervallo valido per ASCII esteso. La funzione CHAR restituisce tuttavia NULL perché il parametro rappresenta solo il primo byte di un carattere multibyte. Un carattere CHAR(2) a byte doppio non può essere parzialmente rappresentato né diviso senza un'operazione di conversione. I singoli byte di un carattere a byte doppio non rappresentano in genere valori CHAR(1) validi.

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

Questo è il set di risultati.

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

G. Uso di CONVERT invece di CHAR per restituire caratteri multibyte

Questo esempio accetta il valore binario come carattere multibyte codificato coerente con la tabella codici predefinita del database corrente, soggetta alla convalida. La conversione dei caratteri è più ampiamente supportata e può essere un'alternativa all'uso della codifica a un livello inferiore.

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]

Questo è il set di risultati.

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

H. Uso di NCHAR invece di CHAR per cercare caratteri UTF-8

Questo esempio evidenzia la distinzione applicata nello standard Unicode tra il punto di codice di un carattere e la sequenza di unità di codice in una determinata forma di codifica. Il codice binario assegnato a un carattere in un set di caratteri classico è l'unico identificatore numerico. Al contrario, la sequenza di byte UTF-8 associata a un carattere è una codifica algoritmica dell'identificatore numerico assegnato: il punto di codice. UTF-8 char e UTF-16 nchar sono forme di codifica diverse che usano unità di codice a 8 bit e a 16 bit dello stesso set di caratteri: Unicode Character Database (UCD).

; 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

Questo è il set di risultati. Generato in base a regole di confronto _SC con supporto di caratteri supplementari.

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

Vedi anche

ASCII (Transact-SQL)
NCHAR (Transact-SQL)
UNICODE (Transact-SQL)
+ (concatenazione di stringhe) (Transact-SQL)
Funzioni per i valori stringa (Transact-SQL)