CHAR (Transact-SQL)
Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse di Microsoft Fabric
Mengembalikan karakter byte tunggal dengan kode bilangan bulat yang ditentukan, seperti yang ditentukan oleh kumpulan karakter dan pengodean kolase default database saat ini.
Sintaks
CHAR ( integer_expression )
Argumen
integer_expression
Bilangan bulat dari 0 hingga 255. CHAR
NULL
mengembalikan nilai untuk ekspresi bilangan bulat di luar rentang input ini atau tidak mewakili karakter lengkap.
CHAR
juga mengembalikan NULL
nilai ketika karakter melebihi panjang jenis pengembalian.
Banyak set karakter umum berbagi ASCII sebagai subset dan mengembalikan karakter yang sama untuk nilai bilangan bulat dalam rentang 0 hingga 127.
Catatan
Beberapa set karakter, seperti Unicode dan Shift Japanese Industrial Standards, menyertakan karakter yang dapat diwakili dalam skema pengodean byte tunggal, tetapi memerlukan pengodean multibyte. Untuk informasi selengkapnya tentang kumpulan karakter, lihat Kumpulan Karakter Byte Tunggal dan Multibyte.
Jenis yang dikembalikan
karakter(1)
Keterangan
Gunakan CHAR
untuk menyisipkan karakter kontrol ke dalam string karakter. Tabel ini memperlihatkan beberapa karakter kontrol yang sering digunakan.
Karakter kontrol | Nilai |
---|---|
Tab | karakter(9) |
Spasi | karakter(32) |
Umpan baris | karakter(10) |
Carriage return | karakter(13) |
Contoh
J. Menggunakan ASCII dan CHAR untuk mencetak nilai ASCII dari string
Contoh ini mencetak nilai dan karakter ASCII untuk setiap karakter dalam string 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
Berikut set hasilnya.
----------- -
78 N
----------- -
101 e
----------- -
119 w
----------- -
32
----------- -
77 M
----------- -
111 o
----------- -
111 o
----------- -
110 n
B. Menggunakan CHAR untuk menyisipkan karakter kontrol
Contoh ini digunakan CHAR(13)
untuk mencetak nama dan alamat email karyawan pada baris terpisah, saat kueri mengembalikan hasilnya sebagai teks. Contoh ini menggunakan database AdventureWorks2022.
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
Berikut set hasilnya.
Ken Sanchez
ken0@adventure-works.com
C. Menggunakan ASCII dan CHAR untuk mencetak nilai ASCII dari string
Contoh ini mengasumsikan set karakter ASCII. Ini mengembalikan nilai karakter untuk enam nilai angka karakter ASCII yang berbeda.
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];
Berikut set hasilnya.
65 66 97 98 49 50
---- ---- ---- ---- ---- ----
A B a b 1 2
D. Menggunakan CHAR untuk menyisipkan karakter kontrol
Contoh ini menggunakan CHAR(13)
untuk mengembalikan informasi dari sys.databases
pada baris terpisah, saat kueri mengembalikan hasilnya sebagai teks.
SELECT name, 'was created on ',
create_date,
CHAR(13),
name,
'is currently ',
state_desc
FROM sys.databases;
GO
Berikut set hasilnya.
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. Menggunakan CHAR untuk mengembalikan karakter byte tunggal
Contoh ini menggunakan nilai bilangan bulat dan heksa dalam rentang yang valid untuk ASCII. Fungsi CHAR mampu menghasilkan karakter Jepang byte tunggal.
SELECT CHAR(188) AS single_byte_representing_complete_character,
CHAR(0xBC) AS single_byte_representing_complete_character;
GO
Berikut set hasilnya.
single_byte_representing_complete_character single_byte_representing_complete_character
------------------------------------------- -------------------------------------------
シ シ
F. Menggunakan CHAR untuk mengembalikan karakter multibyte
Contoh ini menggunakan nilai bilangan bulat dan heksa dalam rentang yang valid untuk Extended ASCII. Namun, CHAR
fungsi kembali NULL
karena parameter hanya mewakili byte pertama dari karakter multibyte. Karakter char(2) byte ganda tidak dapat diwakili sebagian atau dibagi tanpa beberapa operasi konversi. Byte individual dari karakter byte ganda umumnya tidak mewakili nilai karakter yang valid(1).
SELECT CHAR(129) AS first_byte_of_double_byte_character,
CHAR(0x81) AS first_byte_of_double_byte_character;
GO
Berikut set hasilnya.
first_byte_of_double_byte_character first_byte_of_double_byte_character
----------------------------------- -----------------------------------
NULL NULL
G. Gunakan CONVERT alih-alih CHAR untuk mengembalikan karakter multibyte
Contoh ini menerima nilai biner sebagai karakter multibyte yang dikodekan konsisten dengan halaman kode default database saat ini, tunduk pada validasi. Konversi karakter lebih didukung secara luas dan mungkin merupakan alternatif untuk bekerja dengan pengodean pada tingkat yang lebih rendah.
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];
Berikut set hasilnya.
eighth-note context-dependent-convert context-dependent-cast
----------- ------------------------- ----------------------
♪ ♪ ♪
H. Gunakan NCHAR alih-alih CHAR untuk mencari karakter UTF-8
Contoh ini menyoroti perbedaan yang dilakukan standar Unicode antara titik kode karakter dan urutan unit kode di bawah formulir pengodean tertentu. Kode biner yang ditetapkan ke karakter dalam set karakter klasik adalah satu-satunya pengidentifikasi numeriknya.
Sebaliknya, urutan byte UTF-8 yang terkait dengan karakter adalah pengodean algoritma dari pengidentifikasi numerik yang ditetapkan: titik kode. UTF-8 char dan UTF-16 nchar adalah bentuk pengodean yang berbeda menggunakan unit kode 8-bit dan 16-bit, dari set karakter yang sama: Database Karakter Unicode.
;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;
Berikut set hasilnya. Hasil ini dihasilkan di bawah _SC
kolase dengan dukungan karakter tambahan.
Catatan musik | Catatan musik (UTF-8) | Titik Kode | UTF-16LE byte | UTF-8 byte |
---|---|---|---|---|
♫ | ♫ | 9835 | 0x6B26 | 0xE299AB |
🎵 | 🎵 | 127925 | 0x3CD8B5DF | 0xF09F8EB5 |