Megosztás a következőn keresztül:


CHAR (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Az egybájtos karaktert adja vissza a megadott egész számkóddal, ahogy azt a jelenlegi adatbázis alapértelmezett összeállításának karakterkészlete és kódolása határozza meg.

Transact-SQL szintaxis konvenciók

Szemantika

CHAR ( integer_expression )

Arguments

integer_expression

Egy egész szám 0-tól 255-ig. CHAR Egész számkifejezéseket ad NULL vissza, amelyek ezen a bemeneti tartományon kívül esnek, vagy nem teljes karaktert képviselnek.

CHAR akkor is értéket NULL ad vissza, ha a karakter meghaladja a visszaküldési típus hosszát.

Sok gyakori karakterkészlet osztozik az ASCII-vel részhalmazként, és ugyanazt a karaktert adja vissza egész számok értékeire a 0-tól 127-ig terjedő tartományban.

Megjegyzés:

Néhány karakterkészlet, mint például a Unicode és a Shift Japanese Industrial Standards, olyan karaktereket tartalmaz, amelyek egybájtos kódolási sémában is ábrázolhatók, de többbájtos kódolást igényelnek. További információ a karakterkészletekkel kapcsolatban: Single-Byte és többbájtos karakterkészletek.

Visszatérési típusok

char(1)

Megjegyzések

Használd CHAR vezérlő karakterek beillesztésére karakterláncokba. Ez a táblázat néhány gyakran használt vezérlő karaktert mutat be.

Vezérlő karakter Érték
Tab char(9)
Space char(32)
Vonalbeadás char(10)
Kocsivisszatérítés char(13)

Példák

A. Használj ASCII-t és CHAR-t ASCII értékek nyomtatásához egy stringből

Ez a példa kinyomtatja az ASCII értéket és karaktert minden karakterhez a stringben 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

Itt van az eredmények összessége.

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

B. Használj CHAR-t vezérlő karakter beadására

Ez a példa CHAR(13) egy alkalmazott nevét és e-mail címét külön sorokra nyomtatja, amikor a lekérdezés szöveges formátumban adja vissza az eredményt. Ez a példa az AdventureWorks2025 adatbázist használja.

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

Itt van az eredmények összessége.

Ken Sanchez
ken0@adventure-works.com

C. Használj ASCII-t és CHAR-t ASCII értékek nyomtatásához egy stringből

Ez a példa ASCII karakterhalmazt feltételez. Hat különböző ASCII karakterszám értéket adja vissza.

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

Itt van az eredmények összessége.

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

D. Használj CHAR-t vezérlő karakter beadására

Ez a példa CHAR(13) külön sorokban érkező információkat sys.databases szolgál, amikor a lekérdezés szövegként adja vissza az eredményeket.

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

Itt van az eredmények összessége.

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. Használd a CHAR-t az egybájtos karakterek visszaadására

Ez a példa az egész és hex értékeket használja az ASCII érvényes tartományban. A CHAR függvény képes kiadni az egybájtos japán karaktert.

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

Itt van az eredmények összessége.

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

F. Használj CHAR-t többbájtos karakterek visszaküldésére

Ez a példa egész és hex értékeket használ az érvényes tartományban az Extended ASCII esetében. Azonban a CHAR függvény visszatér NULL , mert a paraméter csak egy többbájtos karakter első bájtját képviseli. Egy karakter(2) kétbájtos karakter nem lehet részben ábralni vagy osztani valamilyen átalakítási művelet nélkül. A kétbájtos karakter egyes bájtjai általában nem képviselik érvényes karakter(1) értékeket.

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

Itt van az eredmények összessége.

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

G. Használj CONVERT gombot a CHAR helyett, hogy visszaadj többbájtos karaktereket

Ez a példa a bináris értéket kódolt többbájtos karakterként fogadja el, amely összhangban van az aktuális adatbázis alapértelmezett kódlapjával, és ellenőrzés alá vonul. A karakterátalakítás szélesebb körben támogatott, és alternatívája lehet az alacsonyabb szintű kódolás helyett.

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

Itt van az eredmények összessége.

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

H. Használj NCHAR-t a CHAR helyett, hogy megkeresd az UTF-8 karaktereket

Ez a példa kiemeli azt a különbséget, amelyet a Unicode szabvány megkülönböztet egy karakter kódpontja és a kódegység-sorozat között egy adott kódolási forma alatt. A klasszikus karakterkészlethez hozzárendelt bináris kód az egyetlen numerikus azonosítója.

Ezzel szemben az UTF-8 bájtsorozat, amely egy karakterhez kapcsolódik, algoritmikus kódolása a hozzá rendelt numerikus azonosítónak: a kódpontnak. Az UTF-8 karakter és az UTF-16 nchar különböző kódolási formák , amelyek 8 és 16 bites kódegységeket használnak, ugyanazzal a karakterhalmazsal: a Unicode Karakteradatbázissal.

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

Itt van az eredmények összessége. Ezeket az eredményeket kiegészítő _SC karaktertámogatással összesítve generálják.

Zenei hang Zenei hang (UTF-8) Code Point UTF-16LE bájtok UTF-8 bájtok
9835 0x6B26 0xE299AB
🎵 🎵 127925 0x3CD8B5DF 0xF09F8EB5