CHAR (SQL Bertransaksi)
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics Analytics
Platform System (PDW)
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 )
Catatan
Untuk melihat sintaks transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.
Argumen
integer_expression
Bilangan bulat dari 0 hingga 255. CHARNULL 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 sub-set dan akan 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.
Tipe 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 | char(9) |
| Umpan baris | char(10) |
| Carriage return | karakter(13) |
Contoh
A. 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 adalah tataan hasil.
----------- -
78 N
----------- -
101 e
----------- -
119 w
----------- -
32
----------- -
77 M
----------- -
111 o
----------- -
111 o
----------- -
110 n
B. Menggunakan CHAR untuk menyisipkan karakter kontrol
Contoh ini menggunakan CHAR(13) untuk mencetak nama dan alamat email karyawan pada baris terpisah, saat kueri mengembalikan hasilnya sebagai teks. Contoh ini menggunakan database AdventureWorks2012.
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 adalah hasil yang ditetapkan.
Ken Sanchez
ken0@adventure-works.com
(1 row(s) affected)
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 adalah hasil yang ditetapkan.
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 adalah hasil yang ditetapkan.
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 adalah hasil yang ditetapkan.
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 byte ganda CHAR(2) tidak dapat diwakili sebagian atau dibagi tanpa beberapa operasi konversi.
Byte individu dari karakter byte ganda umumnya tidak mewakili nilai CHAR(1) yang valid.
SELECT CHAR(129) AS first_byte_of_double_byte_character,
CHAR(0x81) AS first_byte_of_double_byte_character;
GO
Berikut adalah hasil yang ditetapkan.
first_byte_of_double_byte_character first_byte_of_double_byte_character
----------------------------------- -----------------------------------
NULL NULL
G. Menggunakan 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 adalah hasil yang ditetapkan.
eighth-note context-dependent-convert context-dependent-cast
----------- ------------------------- ----------------------
♪ ♪ ♪
H. Menggunakan 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 algoritmik dari pengidentifikasi numerik yang ditetapkan: titik kode. CHAR UTF-8 dan UTF-16 nchar adalah formulir pengodean yang berbeda menggunakan unit kode 8-bit dan 16-bit, dari kumpulan 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 adalah hasil yang ditetapkan. Dihasilkan di bawah _SC kolase dengan dukungan karakter tambahan.
Music note Music note (UTF-8) Code Point UTF-16LE bytes UTF-8 bytes
---------- ------------------ ----------- -------------- -----------
♫ ♫ 9835 0x6B26 0xE299AB
🎵 🎵 127925 0x3CD8B5DF 0xF09F8EB5
Lihat juga
ASCII (SQL Bertransaksi)
NCHAR (SQL Bertransaksi)
UNICODE (SQL Bertransaksi)
+ (Perangkaian String) (Transact-SQL)
Fungsi String (SQL Transact)
