CHAR (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalysplattformssystem (PDW)SQL-analysslutpunkt i Microsoft FabricLager i Microsoft FabricSQL-databas i Microsoft Fabric

Returnerar det enbytestecken med den specificerade heltalskoden, som definieras av teckenuppsättningen och kodningen av standardsorteringen av den aktuella databasen.

Transact-SQL syntaxkonventioner

Syntax

CHAR ( integer_expression )

Arguments

integer_expression

Ett heltal från 0 till 255. CHAR returnerar ett NULL värde för heltalsuttryck utanför detta indataintervall eller som inte representerar ett komplett tecken.

CHAR returnerar också ett NULL värde när tecknet överstiger storleken på returtypen.

Många vanliga teckenuppsättningar delar ASCII som delmängd och returnerar samma tecken för heltalsvärden i intervallet 0 till 127.

Anmärkning

Vissa teckenuppsättningar, såsom Unicode och Shift Japanese Industrial Standards, innehåller tecken som kan representeras i ett enbyteskodningsschema, men kräver multibytekodning. Mer information om teckenuppsättningar finns i Single-Byte och Flerbyte-teckenuppsättningar.

Returtyper

char(1)

Anmärkningar

Används CHAR för att infoga kontrolltecken i teckensträngar. Denna tabell visar några ofta använda kontrolltecken.

Kontrolltecken Värde
Tab char(9)
Rymd char(32)
Linjematning char(10)
Vagnretur char(13)

Examples

A. Använd ASCII och CHAR för att skriva ut ASCII-värden från en sträng

Detta exempel skriver ut ASCII-värdet och tecknet för varje tecken i strängen 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

Här är resultatet.

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

B. Använd CHAR för att infoga ett kontrolltecken

Detta exempel använder CHAR(13) användningen för att skriva ut namnet och e-postadressen till en anställd på separata rader, när sökningen returnerar sina resultat som text. Detta exempel använder AdventureWorks2025-databasen.

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

Här är resultatet.

Ken Sanchez
ken0@adventure-works.com

C. Använd ASCII och CHAR för att skriva ut ASCII-värden från en sträng

Detta exempel förutsätter en ASCII-teckenuppsättning. Den returnerar teckenvärdet för sex olika ASCII-teckennummervärden.

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];

Här är resultatet.

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

D. Använd CHAR för att infoga ett kontrolltecken

Detta exempel använder CHAR(13) sig för att returnera information från sys.databases på separata rader, när frågan returnerar sina resultat som text.

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

Här är resultatet.

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. Använd CHAR för att returnera enkelbyte-tecken

Detta exempel använder heltals- och hexvärdena i det giltiga intervallet för ASCII. CHAR-funktionen kan mata ut det japanska tecknet på en byte.

SELECT CHAR(188) AS single_byte_representing_complete_character,
  CHAR(0xBC) AS single_byte_representing_complete_character;
GO

Här är resultatet.

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

F. Använd CHAR för att returnera multibyte-tecken

Detta exempel använder heltals- och hexvärden inom det giltiga intervallet för Extended ASCII. Funktionen returnerar CHARNULL dock eftersom parametern endast representerar den första byten av ett multibytetecken. Ett tecken med tecken(2) dubbelbyte kan inte delvis representeras eller delas utan någon konverteringsoperation. De individuella bytena i ett dubbelbyte-tecken representerar generellt inte giltiga char(1) -värden.

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

Här är resultatet.

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

G. Använd CONVERT istället för CHAR för att returnera multibyte-tecken

Detta exempel accepterar det binära värdet som ett kodat multibytetecken som är förenligt med standardkodsidan för den aktuella databasen, med förbehåll för validering. Teckenkonvertering stöds bredare och kan vara ett alternativ till att arbeta med kodning på en lägre nivå.

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];

Här är resultatet.

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

H. Använd NCHAR istället för CHAR för att slå upp UTF-8-tecken

Detta exempel belyser skillnaden som Unicode-standarden gör mellan en teckens kodpunkt och kodenhetssekvensen under en given kodform. Den binära kod som tilldelas ett tecken i en klassisk teckenuppsättning är dess enda numeriska identifierare.

I kontrast är UTF-8-bytesekvensen kopplad till ett tecken en algoritmisk kodning av dess tilldelade numeriska identifierare: kodpunkten. UTF-8 char och UTF-16 nchar är olika kodningsformer som använder 8-bitars och 16-bitars kodenheter av samma teckenuppsättning: 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;

Här är resultatet. Dessa resultat genereras under en _SC sammanställning med kompletterande karaktärsstöd.

Musiknot Musiknot (UTF-8) Code Point UTF-16LE-byte UTF-8 byte
9835 0x6B26 0xE299AB
🎵 🎵 127925 0x3CD8B5DF 0xF09F8EB5