Delen via


CHAR (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft FabricSQL-database in Microsoft Fabric

Geeft het enkelbyte-teken terug met de gespecificeerde gehele code, zoals gedefinieerd door de tekenset en codering van de standaardcollatie van de huidige database.

Transact-SQL syntaxis-conventies

Syntaxis

CHAR ( integer_expression )

Arguments

integer_expression

Een geheel getal van 0 tot en met 255. CHAR geeft een NULL waarde terug voor gehele expressies buiten dit invoerbereik of die geen volledig karakter vertegenwoordigen.

CHAR geeft ook een NULL waarde terug wanneer het teken de lengte van het retourtype overschrijdt.

Veel veelvoorkomende tekensets delen ASCII als deelverzameling en geven hetzelfde teken terug voor gehele waarden in het bereik 0 tot en met 127.

Opmerking

Sommige tekensets, zoals Unicode en Shift Japanese Industrial Standards, bevatten tekens die in een single-byte coderingsschema kunnen worden weergegeven, maar multibyte-codering vereisen. Voor meer informatie over tekenreeksen, zie Single-Byte en Multibyte Character Sets.

Retourtypen

char(1)

Opmerkingen

Gebruik CHAR het om controletekens in tekenreeksen in te voegen. Deze tabel toont enkele veelgebruikte controlekarakters.

Besturingselementteken Waarde
Tab char(9)
Ruimte char(32)
Lijninvoer char(10)
Regelterugloop char(13)

Voorbeelden

Eén. Gebruik ASCII en CHAR om ASCII-waarden uit een string af te drukken

Dit voorbeeld print de ASCII-waarde en het teken voor elk teken in de 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

Hier is het resultatenoverzicht.

----------- -
78          N
----------- -
101         e
----------- -
119         w
----------- -
32
----------- -
77          M
----------- -
111         o
----------- -
111         o
----------- -
110         n

B. Gebruik CHAR om een besturingskarakter in te voegen

Dit voorbeeld gebruikt CHAR(13) het afdrukken van de naam en het e-mailadres van een medewerker op aparte regels, wanneer de zoekopdracht zijn resultaten als tekst teruggeeft. Dit voorbeeld gebruikt de AdventureWorks2025-database.

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

Hier is het resultatenoverzicht.

Ken Sanchez
ken0@adventure-works.com

C. Gebruik ASCII en CHAR om ASCII-waarden uit een string af te drukken

Dit voorbeeld gaat uit van een ASCII-tekenset. Het geeft de karakterwaarde terug voor zes verschillende ASCII-karakternummerwaarden.

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];

Hier is het resultatenoverzicht.

65   66   97   98   49   50
---- ---- ---- ---- ---- ----
A    B    a    b    1    2

D. Gebruik CHAR om een besturingskarakter in te voegen

Dit voorbeeld gebruikt CHAR(13) om informatie terug te geven van sys.databases op aparte regels, wanneer de zoekopdracht zijn resultaten als tekst teruggeeft.

SELECT name, 'was created on ',
    create_date,
    CHAR(13),
    name,
    'is currently ',
    state_desc
FROM sys.databases;
GO

Hier is het resultatenoverzicht.

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. Gebruik CHAR om single-byte tekens terug te geven

Dit voorbeeld gebruikt de gehele en hex-waarden in het geldige bereik voor ASCII. De CHAR-functie kan het Japanse teken met één byte uitvoeren.

SELECT CHAR(188) AS single_byte_representing_complete_character,
  CHAR(0xBC) AS single_byte_representing_complete_character;
GO

Hier is het resultatenoverzicht.

single_byte_representing_complete_character single_byte_representing_complete_character
------------------------------------------- -------------------------------------------
シ                                           シ

F. Gebruik CHAR om multibyte-tekens terug te geven

Dit voorbeeld gebruikt gehele en hex-waarden in het geldige bereik voor Extended ASCII. De functie geeft echter CHAR een retour NULL omdat de parameter alleen de eerste byte van een multibyte-teken vertegenwoordigt. Een karakter(2) dubbelbyte karakter kan niet gedeeltelijk worden weergegeven of gedeeld zonder een conversiebewerking. De individuele bytes van een dubbelbyte-teken vertegenwoordigen over het algemeen geen geldige char(1) -waarden.

SELECT CHAR(129) AS first_byte_of_double_byte_character,
  CHAR(0x81) AS first_byte_of_double_byte_character;
GO

Hier is het resultatenoverzicht.

first_byte_of_double_byte_character first_byte_of_double_byte_character
----------------------------------- -----------------------------------
NULL                                NULL

G. Gebruik CONVERT in plaats van CHAR om multibyte-tekens terug te geven

Dit voorbeeld accepteert de binaire waarde als een gecodeerd multibyte-teken dat consistent is met de standaardcodepage van de huidige database, onder voorbehoud van validatie. Karakterconversie wordt breder ondersteund en kan een alternatief zijn voor werken met codering op een lager niveau.

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];

Hier is het resultatenoverzicht.

eighth-note context-dependent-convert context-dependent-cast
----------- ------------------------- ----------------------
♪           ♪                         ♪

H. Gebruik NCHAR in plaats van CHAR om UTF-8-personages op te zoeken

Dit voorbeeld benadrukt het onderscheid dat de Unicode-standaard maakt tussen het codepunt van een teken en de code-eenheidsreeks onder een gegeven coderingsvorm. De binaire code die aan een teken in een klassieke tekenset is toegewezen, is de enige numerieke identificatie.

Daarentegen is de UTF-8 byte-reeks die aan een teken is gekoppeld een algoritmische codering van de toegewezen numerieke identificatie: het codepunt. UTF-8 char en UTF-16 nchar zijn verschillende coderingsvormen die 8-bits en 16-bits code-eenheden gebruiken, met dezelfde tekenset: de 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;

Hier is het resultatenoverzicht. Deze resultaten worden gegenereerd in een samenvoeging _SC met aanvullende karakterondersteuning.

Muzieknoot Muzieknoot (UTF-8) Codepunt UTF-16LE bytes UTF-8 bytes
9835 0x6B26 0xE299AB
🎵 🎵 127925 0x3CD8B5DF 0xF09F8EB5