CHAR(Transact-SQL)
적용 대상: Microsoft Fabric의 Microsoft FabricWarehouse에 있는 SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsPlatform System(PDW) 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) |
줄 바꿈 | 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
(1 row(s) affected)
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를 사용하여 제어 문자 삽입
이 예에서는 쿼리가 결과를 텍스트로 반환할 때 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
데이터 정렬 아래에 생성됩니다.
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)
UNICODE(Transact-SQL)
+(문자열 연결)(Transact-SQL)
문자열 함수(Transact-SQL)
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기