Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Hurtownia danych w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
Zwraca znak jednobajtowy z określonym kodem całkowitoliczbowym, zdefiniowanym przez zestaw znaków i kodowanie domyślnej zbiorczości aktualnej bazy danych.
Transact-SQL konwencje składni
Składnia
CHAR ( integer_expression )
Arguments
integer_expression
Liczba całkowita od 0 do 255.
CHAR zwraca NULL wartość dla wyrażeń całkowitoliczbowych poza tym zakresem wejściowym lub niereprezentujących znaku kompletnego.
CHAR zwraca również wartość, NULL gdy znak przekroczy długość typu zwrotu.
Wiele popularnych zestawów znaków dzieli ASCII jako podzbiór i zwraca ten sam znak dla wartości całkowitych w zakresie od 0 do 127.
Uwaga / Notatka
Niektóre zestawy znaków, takie jak Unicode i Shift Japanese Industrial Standards, zawierają znaki, które można reprezentować w jednobajtowym schemacie kodowania, ale wymagają kodowania wielobajtowego. Więcej informacji o zestawach znaków można znaleźć w Single-Byte i zestawach znaków wielobajtowych.
Typy zwracane
char(1)
Uwagi
Używaj CHAR do wstawiania znaków sterujących do ciągów znaków. Ta tabela przedstawia niektóre często używane znaki sterujące.
| Znak kontrolki | Wartość |
|---|---|
| Tab | char(9) |
| Przestrzeń | char(32) |
| Zasilanie linii | char(10) |
| Powrót karetki | char(13) |
Przykłady
A. Użyj ASCII i CHAR do drukowania wartości ASCII z ciągu
Ten przykład wyświetla wartość ASCII i znak dla każdego znaku w ciągu 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
Oto zestaw wyników.
----------- -
78 N
----------- -
101 e
----------- -
119 w
----------- -
32
----------- -
77 M
----------- -
111 o
----------- -
111 o
----------- -
110 n
B. Użyj CHAR, aby wstawić znak sterujący
W tym przykładzie CHAR(13) używa się do wydrukowania imienia i adresu e-mail pracownika na osobnych liniach, gdy zapytanie zwraca wyniki w formie tekstu. Ten przykład wykorzystuje bazę danych 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
Oto zestaw wyników.
Ken Sanchez
ken0@adventure-works.com
C. Użyj ASCII i CHAR do drukowania wartości ASCII z ciągu
Ten przykład zakłada zestaw znaków ASCII. Zwraca wartość znaków dla sześciu różnych numerów znaków 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];
Oto zestaw wyników.
65 66 97 98 49 50
---- ---- ---- ---- ---- ----
A B a b 1 2
D. Użyj CHAR, aby wstawić znak sterujący
Ten przykład zwraca CHAR(13) informacje z sys.databases osobnych linii, gdy zapytanie zwraca wyniki w formie tekstu.
SELECT name, 'was created on ',
create_date,
CHAR(13),
name,
'is currently ',
state_desc
FROM sys.databases;
GO
Oto zestaw wyników.
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. Użyj CHAR, aby zwracać znaki jednobajtowe
Ten przykład wykorzystuje wartości całkowite i heksadecimalne w prawidłowym zakresie ASCII. Funkcja CHAR jest w stanie wygenerować pojedynczy bajtowy znak japoński.
SELECT CHAR(188) AS single_byte_representing_complete_character,
CHAR(0xBC) AS single_byte_representing_complete_character;
GO
Oto zestaw wyników.
single_byte_representing_complete_character single_byte_representing_complete_character
------------------------------------------- -------------------------------------------
シ シ
F. Użyj CHAR, aby zwracać znaki wielobajtowe
Ten przykład wykorzystuje wartości całkowitoliczbowe i heksadecimalne w prawidłowym zakresie dla rozszerzonego ASCII. Jednak funkcja zwraca CHAR się NULL , ponieważ parametr reprezentuje tylko pierwszy bajt znaku wielobajtowego. Znaku char (2) dwubajtowego nie można częściowo reprezentować ani dzielić bez jakiejś operacji konwersji. Poszczególne bajty znaku dwubajtowego zazwyczaj nie reprezentują prawidłowych wartości char(1).
SELECT CHAR(129) AS first_byte_of_double_byte_character,
CHAR(0x81) AS first_byte_of_double_byte_character;
GO
Oto zestaw wyników.
first_byte_of_double_byte_character first_byte_of_double_byte_character
----------------------------------- -----------------------------------
NULL NULL
G. Użyj CONVERT zamiast CHAR, aby zwracać znaki wielobajtowe
Ten przykład akceptuje wartość binarną jako zakodowany znak wielobajtowy zgodny z domyślną stroną kodową aktualnej bazy danych, z podleganiem weryfikacji. Konwersja znaków jest szerzej wspierana i może stanowić alternatywę dla pracy z kodowaniem na niższym poziomie.
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];
Oto zestaw wyników.
eighth-note context-dependent-convert context-dependent-cast
----------- ------------------------- ----------------------
♪ ♪ ♪
H. Użyj NCHAR zamiast CHAR, aby wyszukać postacie UTF-8
Ten przykład podkreśla rozróżnienie, jakie standard Unicode wprowadza między punktem kodowym znaku a sekwencją jednostek kodowych w danej formie kodowania. Kod binarny przypisany znakowi w klasycznym zestawie znaków jest jego jedynym numerycznym identyfikatorem.
Natomiast sekwencja bajtów UTF-8 przypisana znakowi jest algorytmicznym kodowaniem przypisanego identyfikatora numerycznego: punktu kodowego. UTF-8 char i UTF-16 nchar to różne formy kodowania wykorzystujące jednostki kodu 8-bitowego i 16-bitowego, należące do tego samego zestawu znaków: bazy znaków 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;
Oto zestaw wyników. Wyniki te są generowane w ramach zestawienia _SC z dodatkowym wsparciem charakteru.
| Nuta muzyczna | Nuta muzyczna (UTF-8) | Punkt kodowy | UTF-16LE bajty | UTF-8 bajtów |
|---|---|---|---|---|
| ♫ | ♫ | 9835 | 0x6B26 | 0xE299AB |
| 🎵 | 🎵 | 127925 | 0x3CD8B5DF | 0xF09F8EB5 |