CHAR (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-Endpunkt in Microsoft FabricWarehouse in Microsoft Fabric

Hiermit wird das Einzelbytezeichen gemäß Zeichensatz und Codierung der Standardsortierung der aktuellen Datenbank mit dem angegebenen ganzzahligen Code zurückgegeben.

Transact-SQL-Syntaxkonventionen

Syntax

CHAR ( integer_expression )  

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) oder früher finden Sie unter Dokumentation zu früheren Versionen.

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 nutzen ASCII als Teilmenge und geben das gleiche 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)
Zeilenvorschub char(10)
Wagenrücklauf char(13)

Beispiele

A. Verwenden von ASCII und CHAR, um die ASCII-Werte einer Zeichenfolge auszugeben

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 ist das Resultset.

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

B. Verwenden von CHAR, um ein Steuerzeichen einzufügen

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 ist das Resultset.

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

C. Verwenden von ASCII und CHAR, um die ASCII-Werte einer Zeichenfolge auszugeben

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 ist das Resultset.

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

D: Verwenden von CHAR, um ein Steuerzeichen einzufügen

In diesem Beispiel wird CHAR(13) verwendet, um Informationen von „sys.databases“ in separaten Zeilen zurückzugeben, wenn die Ergebnisse der Abfrage als Text zurückgegeben werden.

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

Hier ist das Resultset.

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 ist das Resultset.

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

F. Verwenden von CHAR zum Zurückgeben von Mehrbytezeichen

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 CHAR(2)-Doppelbytezeichen kann ohne Konvertierungsvorgang weder teilweise noch getrennt dargestellt werden. Die einzelnen Bytes eines Doppelbytezeichens stellen im Allgemeinen keine gültigen CHAR(1)-Werte dar.

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

Hier ist das Resultset.

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

G. Verwenden von CONVERT anstelle von CHAR für die Rückgabe von Multibytezeichen

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 umfassender unterstützt und stellt möglicherweise eine Alternative für die Arbeit mit Codierungen auf niedrigerer Ebene dar.

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 ist das Resultset.

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

H. Verwenden von NCHAR anstelle von CHAR für die Suche nach 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 ist das Resultset. . Generiert unter einer _SC-Sortierung mit zusätzlicher Zeichenunterstützung.

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

Weitere Informationen

ASCII (Transact-SQL)
NCHAR (Transact-SQL)
UNICODE (Transact-SQL)
+ (Verketten von Zeichenfolgen) (Transact-SQL)
Zeichenfolgenfunktionen (Transact-SQL)