CHAR (SQL Bertransaksi)

Berlaku untuk:yes SQL Server (semua versi yang didukung) YesAzure SQL Database YesAzure SQL Managed Instance yesAzure Synapse Analytics Analytics yesPlatform 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.

Topic link iconKonvensi Sintaksis T-SQL

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)