CHAR (Transact-SQL)
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL analytics endpoint in Microsoft Fabric Warehouse in Microsoft Fabric
Retourne le caractère à octet unique avec le code 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 active.
Conventions de la syntaxe Transact-SQL
Syntaxe
CHAR ( integer_expression )
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 de la plage 0 à 127.
Remarque
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, consultez 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) |
Space | char(32) |
Saut de ligne | char(10) |
Retour chariot | char(13) |
Exemples
R. Utiliser ASCII et CHAR pour imprimer des valeurs ASCII à partir 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.
----------- -
78 N
----------- -
101 e
----------- -
119 w
----------- -
32
----------- -
77 M
----------- -
111 o
----------- -
111 o
----------- -
110 n
B. Utiliser CHAR pour insérer 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.
Ken Sanchez
ken0@adventure-works.com
C. Utiliser ASCII et CHAR pour imprimer des valeurs ASCII à partir 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.
65 66 97 98 49 50
---- ---- ---- ---- ---- ----
A B a b 1 2
D. Utiliser CHAR pour insérer un caractère de contrôle
Cet exemple utilise CHAR(13)
pour renvoyer des informations à partir de sys.databases
lignes distinctes, lorsque 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.
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. Utiliser CHAR pour retourner des caractères d’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.
single_byte_representing_complete_character single_byte_representing_complete_character
------------------------------------------- -------------------------------------------
シ シ
F. Utiliser CHAR pour retourner des 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 double octet(2) ne peut pas être partiellement représenté ni divisé sans opération de conversion. Les octets individuels d’un caractère double octet ne représentent généralement pas les 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.
first_byte_of_double_byte_character first_byte_of_double_byte_character
----------------------------------- -----------------------------------
NULL NULL
G. Utiliser 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.
eighth-note context-dependent-convert context-dependent-cast
----------- ------------------------- ----------------------
♪ ♪ ♪
H. Utiliser 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. Ces résultats sont générés sous un _SC
classement avec prise en charge supplémentaire des caractères.
Note de musique | Note musicale (UTF-8) | Point de code | Octets UTF-16LE | UTF-8 octets |
---|---|---|---|---|
♫ | ♫ | 9835 | 0x6B26 | 0xE299AB |
🎵 | 🎵 | 127925 | 0x3CD8B5DF | 0xF09F8EB5 |