Bagikan melalui


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.

Konvensi sintaks transact-SQL

Sintaks

CHAR ( integer_expression )

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