Share via


CHAR(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System(PDW)Microsoft Fabric의 SQL 분석 엔드포인트Microsoft Fabric의 Warehouse

현재 데이터베이스의 기본 데이터 정렬의 문자 집합 및 인코딩에 정의된 대로 지정된 정수 코드를 사용하여 싱글 바이트 문자를 반환합니다.

Transact-SQL 구문 표기 규칙

Syntax

CHAR ( integer_expression )

참고 항목

SQL Server 2014(12.x) 및 이전 버전에 대한 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조 하세요.

인수

integer_expression

0에서 255 사이의 정수입니다. CHAR는 이 입력 범위를 벗어나거나 전체 문자를 나타내지 않는 정수 식에 대해 NULL 값을 반환합니다.

CHAR는 문자가 반환 형식의 길이를 초과할 때도 NULL 값을 반환합니다.

많은 공통 문자 집합은 ASCII를 하위 집합으로 공유하고 0에서 127 범위의 정수 값에 대해 동일한 문자를 반환합니다.

참고 항목

유니코드, Shift 일본어 산업 표준 등의 일부 문자 집합에는 싱글바이트 코딩 체계로 나타낼 수 있지만 멀티바이트 인코딩이 필요한 문자가 포함되어 있습니다. 문자 집합에 대한 자세한 내용은 싱글바이트 및 멀티바이트 문자 집합을 참조하세요.

반환 형식

char(1)

설명

문자열에 제어 문자를 삽입하는 데 CHAR를 사용합니다. 이 표에서는 자주 사용되는 제어 문자를 보여 줍니다.

제어 문자
char(9)
Space char(32)
줄 바꿈 char(10)
캐리지 리턴 char(13)

예제

A. ASCII 및 CHAR를 사용하여 문자열에서 ASCII 값 인쇄

이 예에서는 New Moon 문자열에서 각 문자의 ASCII 값과 문자를 인쇄합니다.

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

C. ASCII 및 CHAR를 사용하여 문자열에서 ASCII 값 인쇄

이 예에서는 ASCII 문자 집합이라고 가정합니다. 6가지 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를 사용하여 컨트롤 문자 삽입

이 예제에서는 쿼리가 결과를 텍스트로 반환할 때 별도의 줄에서 sys.databases 정보를 반환하는 데 사용합니다CHAR(13).

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

E. CHAR를 사용하여 싱글 바이트 문자 반환

이 예제에서는 ASCII에 대해 유효한 범위의 정수 및 16진수 값을 사용합니다. 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를 사용하여 멀티바이트 문자 반환

이 예제에서는 확장 ASCII에 유효한 범위의 정수 및 16진수 값을 사용합니다. 그러나 매개 변수가 멀티바이트 문자의 첫 번째 바이트만 나타내기 때문에 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. CHAR 대신 CONVERT를 사용하여 멀티바이트 문자 반환

이 예제에서는 유효성 검사에 따라 현재 데이터베이스의 기본 코드 페이지와 일치하는 인코딩된 멀티바이트 문자로 이진 값을 허용합니다. 문자 변환은 더 광범위하게 지원되며 하위 수준에서 인코딩을 사용하는 대신 사용할 수 있습니다.

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. CHAR 대신 NCHAR를 사용하여 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 데이터 정렬에서 생성됩니다.

음악 참고 음악 참고(UTF-8) 코드 포인트 UTF-16LE 바이트 UTF-8바이트
9835 0x6B26 0xE299AB
🎵 🎵 127925 0x3CD8B5DF 0xF09F8EB5