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)
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour