Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'teki SQL analiz uç noktası
Microsoft Fabric'teki ambar
Microsoft 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 |