Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Vrací jednobajtový znak s určeným celočíselným kódem, jak je definován znakovou sadou a kódováním výchozí třídění aktuální databáze.
Syntaxe
CHAR ( integer_expression )
Arguments
integer_expression
Celé číslo od 0 do 255.
CHAR vrací NULL hodnotu pro celočíselné výrazy mimo tento vstupní rozsah nebo nereprezentující úplný znak.
CHAR také vrací hodnotu NULL , když znak překročí délku typu návratu.
Mnoho běžných znakových sad sdílí ASCII jako podmnožinu a vrací stejný znak pro celočíselné hodnoty v rozsahu 0 až 127.
Poznámka:
Některé znakové sady, jako například Unicode a Shift Japanese Industrial Standards, obsahují znaky, které lze reprezentovat v jednobajtovém kódovacím schématu, ale vyžadují vícebajtové kódování. Pro více informací o znakových sadách viz Single-Byte a vícebajtové znakové sady.
Návratové typy
char(1)
Poznámky
Použijte CHAR k vložení řídicích znaků do řetězců znaků. Tato tabulka ukazuje některé často používané ovládací znaky.
| Řídicí znak | Hodnota |
|---|---|
| Tab | char(9) |
| Prostor | char(32) |
| Posun o řádek | char(10) |
| Návrat vozíku | char(13) |
Examples
A. Použijte ASCII a CHAR k vytištění ASCII hodnot z řetězce
Tento příklad vytiskne ASCII hodnotu a znak pro každý znak v řetězci 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
Tady je soubor výsledků.
----------- -
78 N
----------- -
101 e
----------- -
119 w
----------- -
32
----------- -
77 M
----------- -
111 o
----------- -
111 o
----------- -
110 n
B. Použijte CHAR pro vložení ovládacího znaku
Tento příklad používá CHAR(13) k vytištění jména a e-mailové adresy zaměstnance na samostatné řádky, když dotaz vrací výsledky jako text. Tento příklad využívá databázi AdventureWorks2025.
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
Tady je soubor výsledků.
Ken Sanchez
ken0@adventure-works.com
C. Použijte ASCII a CHAR k vytištění ASCII hodnot z řetězce
Tento příklad předpokládá ASCII znakovou sadu. Vrací hodnotu znaku pro šest různých ASCII čísel znaků.
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];
Tady je soubor výsledků.
65 66 97 98 49 50
---- ---- ---- ---- ---- ----
A B a b 1 2
D. Použijte CHAR pro vložení ovládacího znaku
Tento příklad používá CHAR(13) vrácení informací z sys.databases oddělených řádků, když dotaz vrací výsledky jako text.
SELECT name, 'was created on ',
create_date,
CHAR(13),
name,
'is currently ',
state_desc
FROM sys.databases;
GO
Tady je soubor výsledků.
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. Použijte CHAR pro vrácení jednobajtových znaků
Tento příklad používá celočíselné a hexadecimální hodnoty v platném rozsahu pro ASCII. Funkce CHAR dokáže vyprodukovat jednobajtový japonský znak.
SELECT CHAR(188) AS single_byte_representing_complete_character,
CHAR(0xBC) AS single_byte_representing_complete_character;
GO
Tady je soubor výsledků.
single_byte_representing_complete_character single_byte_representing_complete_character
------------------------------------------- -------------------------------------------
シ シ
F. Použijte CHAR pro vrácení vícebajtových znaků
Tento příklad používá celočíselné a hexadecimální hodnoty v platném rozsahu pro rozšířené ASCII. Funkce však vracíCHAR, NULL protože parametr reprezentuje pouze první bajt vícebajtového znaku. Znak( 2) s dvojbajtem nelze částečně reprezentovat ani dělit bez nějaké konverzní operace. Jednotlivé bajty dvoubajtového znaku obvykle nereprezentují platné hodnoty znaku (1 ).
SELECT CHAR(129) AS first_byte_of_double_byte_character,
CHAR(0x81) AS first_byte_of_double_byte_character;
GO
Tady je soubor výsledků.
first_byte_of_double_byte_character first_byte_of_double_byte_character
----------------------------------- -----------------------------------
NULL NULL
G. Pro vrácení vícebajtových znaků použijte CONVERT místo CHAR
Tento příklad přijímá binární hodnotu jako zakódovaný vícebajtový znak odpovídající výchozí kódové stránce aktuální databáze, s podmínkou ověření. Konverze znaků je rozšířenější a může být alternativou k práci s kódováním na nižší úrovni.
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];
Tady je soubor výsledků.
eighth-note context-dependent-convert context-dependent-cast
----------- ------------------------- ----------------------
♪ ♪ ♪
H. Použijte NCHAR místo CHAR pro vyhledávání UTF-8 postav
Tento příklad zdůrazňuje rozlišení, které standard Unicode dělá mezi kódovým bodem znaku a sekvencí kódových jednotek v daném kódovacím formuláři. Binární kód přiřazený znaku v klasické znakové sadě je jeho jediným číselným identifikátorem.
Naopak sekvence UTF-8 bajtů přiřazená znaku je algoritmické kódování jeho přiděleného číselného identifikátoru: kódového bodu. UTF-8 char a UTF-16 nchar jsou různé kódovací formy využívající8bitové a 16bitové kódové jednotky stejné znakové sady: Unicode Character Database.
;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;
Tady je soubor výsledků. Tyto výsledky jsou generovány v _SC rámci kolace s doplňkovou podporou znaků.
| Hudební nota | Hudební nota (UTF-8) | Kód | UTF-16LE bajty | UTF-8 bajtů |
|---|---|---|---|---|
| ♫ | ♫ | 9835 | 0x6B26 | 0xE299AB |
| 🎵 | 🎵 | 127925 | 0x3CD8B5DF | 0xF09F8EB5 |
Související obsah
- ASCII (Transact-SQL)
- NCHAR (Transact-SQL)
- UNICODE (Transact-SQL)
- + (Řetězení strun) (Transact-SQL)
- řetězcové funkce (Transact-SQL)