CHAR (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL Analytics-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric
Gibt das Einzelbytezeichen mit dem angegebenen ganzzahligen Code zurück, wie durch den Zeichensatz und die Codierung der Standardsortierung der aktuellen Datenbank definiert.
Transact-SQL-Syntaxkonventionen
Syntax
CHAR ( integer_expression )
Argumente
integer_expression
Eine ganze Zahl zwischen 0 und 255. CHAR
gibt einen NULL
-Wert für ganzzahlige Ausdrücke zurück, die außerhalb dieses Eingabebereichs liegen oder kein vollständiges Zeichen darstellen.
CHAR
gibt außerdem einen NULL
-Wert zurück, wenn das Zeichen die Länge des Rückgabetyps überschreitet.
Viele gängige Zeichensätze teilen ASCII als Teilmenge und geben dasselbe Zeichen für ganzzahlige Werte im Bereich 0 bis 127 zurück.
Hinweis
Einige Zeichensätze (z. B. Unicode und Shift Japanese Industrial Standards) enthalten Zeichen, die in einem Einzelbytecodierungsschema dargestellt werden können, aber eine Multibytecodierung erfordern. Weitere Informationen zu Zeichensätzen finden Sie unter Einzelbyte- und Mehrbyte-Zeichensätze.
Rückgabetypen
char(1)
Hinweise
Verwenden Sie CHAR
, um Steuerzeichen in Zeichenfolgen einzufügen. In dieser Tabelle finden Sie einige häufig verwendete Steuerzeichen.
Steuerzeichen | Wert |
---|---|
Registerkarte | char(9) |
Space | char(32) |
Zeilenvorschub | char(10) |
Wagenrücklauf | char(13) |
Beispiele
A. Verwenden von ASCII und CHAR zum Drucken von ASCII-Werten aus einer Zeichenfolge
In diesem Beispiel werden der ASCII-Wert und das Zeichen für jedes in der Zeichenfolge New Moon
enthaltene Zeichen ausgegeben.
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
Hier sehen Sie das Ergebnis.
----------- -
78 N
----------- -
101 e
----------- -
119 w
----------- -
32
----------- -
77 M
----------- -
111 o
----------- -
111 o
----------- -
110 n
B. Verwenden von CHAR zum Einfügen eines Steuerelementzeichens
In diesem Beispiel wird CHAR(13)
verwendet, um den Namen und die E-Mail-Adresse eines Mitarbeiters in separaten Zeilen auszugeben, wenn die Ergebnisse der Abfrage als Text zurückgegeben werden. In diesem Beispiel wird die AdventureWorks2022-Datenbank verwendet.
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
Hier sehen Sie das Ergebnis.
Ken Sanchez
ken0@adventure-works.com
C. Verwenden von ASCII und CHAR zum Drucken von ASCII-Werten aus einer Zeichenfolge
Dieses Beispiel geht von einem ASCII-Zeichensatz aus. Es gibt den Zeichenwert für sechs verschiedene Zahlenwerte von ASCII-Zeichen zurück.
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];
Hier sehen Sie das Ergebnis.
65 66 97 98 49 50
---- ---- ---- ---- ---- ----
A B a b 1 2
D: Verwenden von CHAR zum Einfügen eines Steuerelementzeichens
In diesem Beispiel werden CHAR(13)
Informationen aus sys.databases
separaten Zeilen zurückgegeben, wenn die Abfrage die Ergebnisse als Text zurückgibt.
SELECT name, 'was created on ',
create_date,
CHAR(13),
name,
'is currently ',
state_desc
FROM sys.databases;
GO
Hier sehen Sie das Ergebnis.
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. Verwenden von CHAR zum Zurückgeben von Einzelbytezeichen
Dieses Beispiel verwendet die Ganzzahl- und hexadezimal Werte im gültigen Bereich für ASCII. Die CHAR-Funktion kann japanische Einzelbytezeichen ausgeben.
SELECT CHAR(188) AS single_byte_representing_complete_character,
CHAR(0xBC) AS single_byte_representing_complete_character;
GO
Hier sehen Sie das Ergebnis.
single_byte_representing_complete_character single_byte_representing_complete_character
------------------------------------------- -------------------------------------------
シ シ
F. Verwenden von CHAR zum Zurückgeben von Multibyte-Zeichen
In diesem Beispiel werden ganzzahlige und hexadezimale Werte im gültigen Bereich für erweiterte ASCII-Zeichen verwendet. Die Funktion CHAR
gibt jedoch NULL
zurück, da der Parameter nur das erste Byte eines Multibytezeichens darstellt. Ein Zeichen mit Doppelbyte(2) kann nicht teilweise dargestellt oder geteilt werden, ohne dass ein Konvertierungsvorgang erfolgt. Die einzelnen Bytes eines Double-Byte-Zeichens stellen im Allgemeinen keine gültigen Zeichenwerte dar.
SELECT CHAR(129) AS first_byte_of_double_byte_character,
CHAR(0x81) AS first_byte_of_double_byte_character;
GO
Hier sehen Sie das Ergebnis.
first_byte_of_double_byte_character first_byte_of_double_byte_character
----------------------------------- -----------------------------------
NULL NULL
G. Verwenden von CONVERT anstelle von CHAR zum Zurückgeben von Multibyte-Zeichen
In diesem Beispiel wird der binäre Wert, abhängig von der Validierung, als codiertes Multibytezeichen gemäß der Standardcodepage der aktuellen Datenbank akzeptiert. Die Zeichenkonvertierung wird breiter unterstützt und kann eine Alternative zum Arbeiten mit der Codierung auf einer niedrigeren Ebene sein.
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];
Hier sehen Sie das Ergebnis.
eighth-note context-dependent-convert context-dependent-cast
----------- ------------------------- ----------------------
♪ ♪ ♪
H. Verwenden Von NCHAR anstelle von CHAR zum Nachschlagen von UTF-8 Zeichen
In diesem Beispiel wird die Unterscheidung hervorgehoben, die der Unicode-Standard zwischen dem Codepunkt und der Codeeinheitssequenz des Zeichens bei einem bestimmten Codierungsformat macht. Der binäre Code, der einem Zeichen in einem klassischen Zeichensatz zugewiesen ist, ist dessen einziger numerischer Bezeichner.
Im Gegensatz dazu ist die UTF-8-Bytesequenz, die einem Zeichen zugeordnet ist, eine algorithmische Codierung des zugewiesenen numerischen Bezeichners, also des Codepunkts. char (UTF-8) und nchar (UTF-16) sind unterschiedliche Codierungsformate mit 8-Bit- bzw. 16-Bit-Codeeinheiten desselben Zeichensatzes: der Datenbank der Unicode-Zeichen (Unicode Character Database).
;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;
Hier sehen Sie das Ergebnis. Diese Ergebnisse werden unter einer _SC
Sortierung mit ergänzender Zeichenunterstützung generiert.
Musiknotiz | Musiknotiz (UTF-8) | Codepunkt | UTF-16LE Bytes | UTF-8 Bytes |
---|---|---|---|---|
♫ | ♫ | 9835 | 0x6B26 | 0xE299AB |
🎵 | 🎵 | 127925 | 0x3CD8B5DF | 0xF09F8EB5 |