Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analysplattformssystem (PDW)
SQL-analysslutpunkt i Microsoft Fabric
Lager i Microsoft Fabric
SQL-databas i Microsoft Fabric
Returnerar det enbytestecken med den specificerade heltalskoden, som definieras av teckenuppsättningen och kodningen av standardsorteringen av den aktuella databasen.
Transact-SQL syntaxkonventioner
Syntax
CHAR ( integer_expression )
Arguments
integer_expression
Ett heltal från 0 till 255.
CHAR returnerar ett NULL värde för heltalsuttryck utanför detta indataintervall eller som inte representerar ett komplett tecken.
CHAR returnerar också ett NULL värde när tecknet överstiger storleken på returtypen.
Många vanliga teckenuppsättningar delar ASCII som delmängd och returnerar samma tecken för heltalsvärden i intervallet 0 till 127.
Anmärkning
Vissa teckenuppsättningar, såsom Unicode och Shift Japanese Industrial Standards, innehåller tecken som kan representeras i ett enbyteskodningsschema, men kräver multibytekodning. Mer information om teckenuppsättningar finns i Single-Byte och Flerbyte-teckenuppsättningar.
Returtyper
char(1)
Anmärkningar
Används CHAR för att infoga kontrolltecken i teckensträngar. Denna tabell visar några ofta använda kontrolltecken.
| Kontrolltecken | Värde |
|---|---|
| Tab | char(9) |
| Rymd | char(32) |
| Linjematning | char(10) |
| Vagnretur | char(13) |
Examples
A. Använd ASCII och CHAR för att skriva ut ASCII-värden från en sträng
Detta exempel skriver ut ASCII-värdet och tecknet för varje tecken i strängen 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
Här är resultatet.
----------- -
78 N
----------- -
101 e
----------- -
119 w
----------- -
32
----------- -
77 M
----------- -
111 o
----------- -
111 o
----------- -
110 n
B. Använd CHAR för att infoga ett kontrolltecken
Detta exempel använder CHAR(13) användningen för att skriva ut namnet och e-postadressen till en anställd på separata rader, när sökningen returnerar sina resultat som text. Detta exempel använder AdventureWorks2025-databasen.
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
Här är resultatet.
Ken Sanchez
ken0@adventure-works.com
C. Använd ASCII och CHAR för att skriva ut ASCII-värden från en sträng
Detta exempel förutsätter en ASCII-teckenuppsättning. Den returnerar teckenvärdet för sex olika ASCII-teckennummervärden.
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];
Här är resultatet.
65 66 97 98 49 50
---- ---- ---- ---- ---- ----
A B a b 1 2
D. Använd CHAR för att infoga ett kontrolltecken
Detta exempel använder CHAR(13) sig för att returnera information från sys.databases på separata rader, när frågan returnerar sina resultat som text.
SELECT name, 'was created on ',
create_date,
CHAR(13),
name,
'is currently ',
state_desc
FROM sys.databases;
GO
Här är resultatet.
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. Använd CHAR för att returnera enkelbyte-tecken
Detta exempel använder heltals- och hexvärdena i det giltiga intervallet för ASCII. CHAR-funktionen kan mata ut det japanska tecknet på en byte.
SELECT CHAR(188) AS single_byte_representing_complete_character,
CHAR(0xBC) AS single_byte_representing_complete_character;
GO
Här är resultatet.
single_byte_representing_complete_character single_byte_representing_complete_character
------------------------------------------- -------------------------------------------
シ シ
F. Använd CHAR för att returnera multibyte-tecken
Detta exempel använder heltals- och hexvärden inom det giltiga intervallet för Extended ASCII. Funktionen returnerar CHARNULL dock eftersom parametern endast representerar den första byten av ett multibytetecken. Ett tecken med tecken(2) dubbelbyte kan inte delvis representeras eller delas utan någon konverteringsoperation. De individuella bytena i ett dubbelbyte-tecken representerar generellt inte giltiga char(1) -värden.
SELECT CHAR(129) AS first_byte_of_double_byte_character,
CHAR(0x81) AS first_byte_of_double_byte_character;
GO
Här är resultatet.
first_byte_of_double_byte_character first_byte_of_double_byte_character
----------------------------------- -----------------------------------
NULL NULL
G. Använd CONVERT istället för CHAR för att returnera multibyte-tecken
Detta exempel accepterar det binära värdet som ett kodat multibytetecken som är förenligt med standardkodsidan för den aktuella databasen, med förbehåll för validering. Teckenkonvertering stöds bredare och kan vara ett alternativ till att arbeta med kodning på en lägre nivå.
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];
Här är resultatet.
eighth-note context-dependent-convert context-dependent-cast
----------- ------------------------- ----------------------
♪ ♪ ♪
H. Använd NCHAR istället för CHAR för att slå upp UTF-8-tecken
Detta exempel belyser skillnaden som Unicode-standarden gör mellan en teckens kodpunkt och kodenhetssekvensen under en given kodform. Den binära kod som tilldelas ett tecken i en klassisk teckenuppsättning är dess enda numeriska identifierare.
I kontrast är UTF-8-bytesekvensen kopplad till ett tecken en algoritmisk kodning av dess tilldelade numeriska identifierare: kodpunkten. UTF-8 char och UTF-16 nchar är olika kodningsformer som använder 8-bitars och 16-bitars kodenheter av samma teckenuppsättning: 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;
Här är resultatet. Dessa resultat genereras under en _SC sammanställning med kompletterande karaktärsstöd.
| Musiknot | Musiknot (UTF-8) | Code Point | UTF-16LE-byte | UTF-8 byte |
|---|---|---|---|---|
| ♫ | ♫ | 9835 | 0x6B26 | 0xE299AB |
| 🎵 | 🎵 | 127925 | 0x3CD8B5DF | 0xF09F8EB5 |