Aracılığıyla paylaş


CHAR (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

Mevcut veritabanının varsayılan derlemesinin karakter seti ve kodlamasıyla tanımlanan tam sayı koduyla tek baytlık karakteri döndürür.

Transact-SQL söz dizimi kuralları

Sözdizimi

CHAR ( integer_expression )

Arguments

integer_expression

0'dan 255'e kadar bir tam sayı. CHAR bu giriş aralığı dışındaki veya tam bir karakteri temsil etmeyen tamsayı ifadeler için bir değer döndürür NULL .

CHAR ayrıca karakter dönüş türünün uzunluğunu aştığında da bir NULL değer döndürür.

Birçok yaygın karakter kümesi, ASCII'yi alt küme olarak paylaşır ve 0 ile 127 arasındaki tam sayı değerleri için aynı karakteri döndürür.

Uyarı

Unicode ve Shift Japanese Industrial Standards gibi bazı karakter setleri, tek baytlı kodlama şemasıyla temsil edilebilen ancak çok baytlı kodlama gerektiren karakterler içerir. Karakter kümeleri hakkında daha fazla bilgi için bkz. Single-Byte ve Çok Baytlı Karakter Kümeleri.

Dönüş türleri

char(1)

Açıklamalar

Kontrol karakterlerini karakter dizelerine eklemek için kullanılır CHAR . Bu tablo, sıkça kullanılan bazı kontrol karakterlerini gösterir.

Denetim karakteri Değer
Tab char(9)
Uzay char(32)
Satır besleme char(10)
Satır başı dönüşü char(13)

Örnekler

A. Bir diziden ASCII değerlerini basmak için ASCII ve CHAR kullanın

Bu örnek, dizimizdeki New Moonher karakter için ASCII değerini ve karakterini yazdırır.

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

Sonuç kümesi aşağıdadır.

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

B. Kontrol karakteri eklemek için CHAR kullanın

Bu örnek, sorgu sonuçları metin olarak döndürdüğünde, bir çalışanın adını ve e-posta adresini ayrı satırlara bastırmak için kullanılır CHAR(13) . Bu örnek AdventureWorks2025 veritabanını kullanıyor.

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

Sonuç kümesi aşağıdadır.

Ken Sanchez
ken0@adventure-works.com

C. Bir diziden ASCII değerlerini basmak için ASCII ve CHAR kullanın

Bu örnek, bir ASCII karakter seti varsayımını içerir. Altı farklı ASCII karakter sayı değeri için karakter değerini döndürür.

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

Sonuç kümesi aşağıdadır.

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

D. Kontrol karakteri eklemek için CHAR kullanın

Bu örnek, sorgu sonuçları metin olarak döndürdüğünde ayrı satırlardan gelen bilgileri CHAR(13) döndürmek için kullanılırsys.databases.

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

Sonuç kümesi aşağıdadır.

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. Tek baytlı karakterleri döndürmek için CHAR kullanın

Bu örnek, ASCII için geçerli aralıktaki tam sayı ve hex değerleri kullanır. CHAR fonksiyonu, tek baytlık Japonca karakteri çıkarabilir.

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

Sonuç kümesi aşağıdadır.

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

F. Çok baytlı karakterleri döndürmek için CHAR kullanın

Bu örnek, Genişletilmiş ASCII için geçerli aralıkta tam sayı ve altıgen değerler kullanır. Ancak fonksiyon, CHAR parametrenin çok baytlı bir karakterin yalnızca ilk baytını temsil etmesi nedeniyle geri döner NULL . Bir char(2) çift baytlık karakter, bir dönüşüm işlemi olmadan kısmen temsil edilemez veya bölünmez. Çift baytlı bir karakterin bireysel baytları genellikle geçerli char(1) değerlerini temsil etmez.

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

Sonuç kümesi aşağıdadır.

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

G. Çok baytlı karakterler döndürmek için CHAR yerine CONVERT kullanın

Bu örnek, ikili değeri, mevcut veritabanının varsayılan kod sayfasıyla tutarlı kodlanmış çok baytlı bir karakter olarak kabul eder ve doğrulamaya tabi olur. Karakter dönüştürme daha geniş bir şekilde desteklenir ve daha düşük seviyede kodlama ile çalışmaya alternatif olabilir.

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

Sonuç kümesi aşağıdadır.

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

H. UTF-8 karakterlerini aramak için CHAR yerine NCHAR kullanın

Bu örnek, Unicode standardının bir karakterin kod noktası ile belirli bir kodlama formu altında kod birimi dizisi arasındaki farkı vurgular. Klasik bir karakter setinde bir karaktere atanan ikili kod, onun tek sayısal tanımlayıcısıdır.

Buna karşılık, bir karakterle ilişkilendirilen UTF-8 bayt dizisi, ona atanan sayısal tanımlayıcının algoritmik kodlamasıdır: kod noktası. UTF-8 karakteri ve UTF-16 nchar, aynı karakter setine sahip 8-bit ve 16-bit kod birimleri kullanan farklı kodlama biçimleridir: Unicode Karakter Veritabanı.

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

Sonuç kümesi aşağıdadır. Bu sonuçlar, ek karakter desteğiyle bir _SC derleme altında oluşturulur.

Müzik notası Müzik notası (UTF-8) Code Point UTF-16LE baytları UTF-8 baytlar
9835 0x6B26 0xE299AB
🎵 🎵 127925 0x3CD8B5DF 0xF09F8EB5