Freigeben über


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