CHAR (Transact-SQL)
Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Управляемый экземпляр SQL Azure Конечная точка аналитики аналитики Synapse Analytics Analytics (PDW)SQL Analyticsв Microsoft FabricХранилище в Microsoft Fabric
Возвращает однобайтовый символ с указанным целочисленным кодом, как определено в наборе символов и кодировке параметров сортировки по умолчанию для текущей базы данных.
Соглашения о синтаксисе Transact-SQL
Синтаксис
CHAR ( integer_expression )
Примечание.
Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.
Аргументы
integer_expression
Целое число от 0 до 255. CHAR
возвращает значение NULL
для целочисленных выражений, которые выходят за пределы этого входного диапазона или не представляют полный символ.
CHAR
также возвращает значение NULL
, если символ превышает длину возвращаемого типа.
Многие распространенные кодировки используют ASCII в качестве подмножества и возвращают тот же символ для целочисленных значений в диапазоне от 0 до 127.
Примечание.
Некоторые кодировки, такие как Юникод и Shift Japanese Industrial Standards (Shift JIS), содержат символы, которые могут быть представлены в однобайтовой схеме кодирования, но требуют многобайтового кодирования. Дополнительные сведения о кодировках см. в статье Однобайтовые и многобайтовые кодировки.
Типы возвращаемых данных
char(1)
Замечания
Функция CHAR
может использоваться для вставки управляющих символов в символьные строки. В этой таблице показаны некоторые часто используемые управляющие символы.
Управляющий символ | Значение |
---|---|
TAB | char(9) |
Перевод строки | char(10) |
Возврат каретки | char(13) |
Примеры
А. Использование ASCII и CHAR для отображения значений ASCII из строки
В этом примере отображается значение ASCII и символ для каждого символа в строке 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
Результирующий набор:
----------- -
78 N
----------- -
101 e
----------- -
119 w
----------- -
32
----------- -
77 M
----------- -
111 o
----------- -
111 o
----------- -
110 n
B. Использование функции CHAR для вставки управляющего символа
В этом примере используется выражение CHAR(13)
, чтобы отображать имя и адрес электронной почты сотрудника в отдельных строках, когда результаты запроса возвращаются в виде текста. В этом примере используется база данных 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
Результирующий набор:
Ken Sanchez
ken0@adventure-works.com
(1 row(s) affected)
C. Использование ASCII и CHAR для отображения значений ASCII из строки
В этом примере используется набор символов ASCII. В нем возвращается значение символа для шести разных числовых значений символов ASCII.
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];
Результирующий набор:
65 66 97 98 49 50
---- ---- ---- ---- ---- ----
A B a b 1 2
D. Использование функции CHAR для вставки управляющего символа
В этом примере используется CHAR(13)
для получения сведений из файла sys.databases в отдельных строках, когда результаты запроса возвращаются в виде текста.
SELECT name, 'was created on ', create_date, CHAR(13), name, 'is currently ', state_desc
FROM sys.databases;
GO
Результирующий набор:
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
Д. Использование функции CHAR для возврата однобайтовых символов
В этом примере используется целое и шестнадцатеричное значения в допустимом диапазоне кодировки ASCII. Функция CHAR может возвратить однобайтовый японский символ.
SELECT CHAR(188) AS single_byte_representing_complete_character,
CHAR(0xBC) AS single_byte_representing_complete_character;
GO
Результирующий набор:
single_byte_representing_complete_character single_byte_representing_complete_character
------------------------------------------- -------------------------------------------
シ シ
F. Использование функции CHAR для возврата многобайтовых символов
В этом примере используется целое и шестнадцатеричное значения в допустимом диапазоне кодировки Extended ASCII.
Функция CHAR
возвращает значение NULL
, так как параметр представляет только первый байт многобайтового символа.
Двухбайтовый символ CHAR(2) не может быть частично представлен или разделен без операции преобразования.
Отдельные байты двухбайтовых символов обычно не представляют допустимые значения типа CHAR(1).
SELECT CHAR(129) AS first_byte_of_double_byte_character,
CHAR(0x81) AS first_byte_of_double_byte_character;
GO
Результирующий набор:
first_byte_of_double_byte_character first_byte_of_double_byte_character
----------------------------------- -----------------------------------
NULL NULL
G. Использование функции CONVERT вместо CHAR для возврата многобайтовых символов
В этом примере двоичное значение принимается в виде закодированного многобайтового символа, соответствующего кодовой странице текущей базы данных по умолчанию (подлежит проверке). Преобразование символов поддерживается более широко и может быть альтернативой работе с кодировкой на более низком уровне.
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]
Результирующий набор:
eighth-note context-dependent-convert context-dependent-cast
----------- ------------------------- ----------------------
♪ ♪ ♪
H. Использование типа NCHAR вместо CHAR для поиска символов UTF-8
В этом примере демонстрируется различие, которое проводится в стандарте Юникод между кодовой точкой символа и последовательностью кодовой единицы в заданной форме кодировки. Двоичный код, назначенный символу в классической кодировке, является его единственным числовым идентификатором. В отличие от этого последовательность байтов UTF-8, связанная с символом, является алгоритмическим кодированием назначенного ему числового идентификатора: кодовой точки. UTF-8 char и UTF-16 nchar — это разные формы кодировки с использованием 8-битных и 16-битных кодовых единиц одной и той же кодировки: базы данных символов Юникода.
; 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
Результирующий набор: Создается под параметрами _SC
сортировки с дополнительной поддержкой символов.
Music note Music note (UTF-8) Code Point UTF-16LE bytes UTF-8 bytes
---------- ------------------ ----------- -------------- -----------
♫ ♫ 9835 0x6B26 0xE299AB
🎵 🎵 127925 0x3CD8B5DF 0xF09F8EB5
См. также
ASCII (Transact-SQL)
NCHAR (Transact-SQL)
ЮНИКОД (Transact-SQL)
+ (Объединение строк) (Transact-SQL)
Строковые функции (Transact-SQL)
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделе:Отправить и просмотреть отзыв по