CHAR (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Point de terminaison analytique SQL dans Microsoft FabricEntrepôt dans Microsoft Fabric

Retourne le caractère codé sur un octet avec le code d’entier spécifié, tel que défini par le jeu de caractères et l’encodage du classement par défaut de la base de données actuelle.

Conventions de la syntaxe Transact-SQL

Syntaxe

CHAR ( integer_expression )  

Remarque

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 (12.x) et versions antérieures, consultez Versions antérieures de la documentation.

Arguments

integer_expression
Entier compris entre 0 et 255. CHAR retourne la valeur NULL pour les expressions d’entier situées en dehors de cette plage d’entrée ou qui ne représente pas un caractère complet. CHAR retourne également la valeur NULL quand le caractère dépasse la longueur du type de retour. De nombreux jeux de caractères communs partagent ASCII en tant que sous-ensemble et retournent le même caractère pour les valeurs entières comprises entre 0 et 127.

Notes

Certains jeux de caractères, comme Unicode et Shift Japanese Industrial Standards, comprennent des caractères qui peuvent être représentés dans un système de codage à un octet, mais nécessitent un codage multioctets. Pour plus d’informations sur les jeux de caractères, reportez-vous à Jeux de caractères codés sur un octet et multioctets.

Types de retour

char(1)

Remarques

Utilisez CHAR pour insérer des caractères de contrôle dans des chaînes de caractères. Ce tableau répertorie quelques-uns des caractères de contrôle les plus utilisés.

Caractère de contrôle Value
Onglet char(9)
Saut de ligne char(10)
Retour chariot char(13)

Exemples

R. Utilisation d'ASCII et CHAR pour imprimer les valeurs ASCII d'une chaîne

Cet exemple imprime la valeur et le caractère ASCII de chacun des caractères de la chaîne 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  

Voici le jeu de résultats obtenu.

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

B. Utilisation de CHAR pour l'insertion d'un caractère de contrôle

Cet exemple utilise CHAR(13) pour imprimer le nom et l’adresse e-mail d’un employé sur des lignes distinctes, quand la requête retourne ses résultats sous forme de texte. Cet exemple utilise la base de données 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  

Voici le jeu de résultats obtenu.

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

C. Utilisation d'ASCII et CHAR pour imprimer les valeurs ASCII d'une chaîne

Cet exemple suppose un jeu de caractères ASCII. Il retourne la valeur de caractère pour six nombres de caractère ASCII différents.

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

Voici le jeu de résultats obtenu.

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

D. Utilisation de CHAR pour l'insertion d'un caractère de contrôle

Cet exemple utilise CHAR(13) pour retourner des informations à partir de sys.databases sur des lignes distinctes, quand la requête retourne ses résultats sous forme de texte.

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

Voici le jeu de résultats obtenu.

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. Utilisation de CHAR pour retourner les caractères codés sur un octet

Cet exemple utilise les valeurs d’entier et hexadécimales dans la plage valide pour ASCII. La fonction CHAR peut sortir les caractères japonais codés sur un octet.

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

Voici le jeu de résultats obtenu.

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

F. Utilisation de CHAR pour retourner les caractères multioctets

Cet exemple utilise les valeurs d’entier et hexadécimales dans la plage valide du jeu de caractères ASCII étendu. Toutefois, la fonction CHAR retourne la valeur NULL, car le paramètre représente uniquement le premier octet d’un caractère multioctet. Un caractère codé sur deux octets de type CHAR(2) ne peut pas être partiellement représenté ou divisé sans opération de conversion. Les octets individuels d’un caractère codé sur deux octets ne représentent généralement pas de valeurs CHAR(1) valides.

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

Voici le jeu de résultats obtenu.

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

G. Utilisation de CONVERT au lieu de CHAR pour retourner des caractères multioctets

Dans cet exemple, la valeur binaire est acceptée en tant que caractère multioctet encodé cohérent avec la page de codes par défaut de la base de données actuelle, sous réserve de validation. La conversion de caractères est plus largement prise en charge et peut être une alternative à l’utilisation de l’encodage à un niveau inférieur.

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]

Voici le jeu de résultats obtenu.

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

H. Utilisation de NCHAR au lieu de CHAR pour rechercher des caractères UTF-8

Cet exemple met en évidence la distinction que la norme Unicode effectue entre le point de code d’un caractère et la séquence d’unités de code sous une forme d’encodage donnée. Le code binaire assigné à un caractère dans un jeu de caractères classique est son seul identificateur numérique. En revanche, la séquence d’octets UTF-8 associée à un caractère est un encodage algorithmique de son identificateur numérique affecté : le point de code. UTF-8 char et UTF-16 nchar sont des formes de codage différentes utilisant des unités de code sur 8 bits et 16 bits du même jeu de caractères : la base de données de caractères 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

Voici le jeu de résultats obtenu. généré sous un classement _SC avec prise en charge de caractères supplémentaires.

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

Voir aussi

ASCII (Transact-SQL)
NCHAR (Transact-SQL)
UNICODE (Transact-SQL)
+ (Concaténation de chaîne) (Transact-SQL)
Fonctions de chaîne (Transact-SQL)