CHAR (Transact-SQL)
適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス
現在のデータベースの既定の照合順序の文字セットとエンコードによって定義されている、指定した整数コードを持つ 1 バイト文字が返されます。
構文
CHAR ( integer_expression )
Note
SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。
引数
integer_expression
0 ~ 255 の整数です。 この入力範囲外である、または完全な文字を表していない整数式の場合は、CHAR
で NULL
値が返されます。
また、文字が戻り値の型の長さを超えた場合も、CHAR
で NULL
値が返されます。
多くの一般的な文字セットは、ASCII のサブセットを共有しており、0 から 127 の範囲の整数値に対して同じ文字を返します。
注意
Unicode や Shift_JIS などの一部の文字セットには、1 バイトのコード体系では表現できない文字が含まれ、マルチバイトのエンコードが必要になります。 文字セットについて詳しくは、「1 バイト文字セットとマルチバイト文字セット」をご覧ください。
戻り値の型
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)
を使用して、sys.databases からの情報を別々の行で返します。
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 を使用して 1 バイト文字を返す
この例では、ASCII の有効な範囲内の整数と 16 進値が使用されます。 CHAR 関数は、1 バイトの日本語の文字を出力できます。
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) の 2 バイト文字は、何らかの変換操作なしでは、部分的に表したり、分割したりすることはできません。
通常、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 文字を参照する
この例では、Unicode 標準による特定の "エンコード形式" での文字の "コード ポイント" と "コード単位シーケンス" の間の区別を示します。 従来の文字セットで文字に割り当てられるバイナリ コードは、その数値識別子に過ぎません。 一方、文字に関連付けられた UTF-8 バイト シーケンスは、割り当てられた数値識別子 (コード ポイント) のアルゴリズム エンコードです。 UTF-8 の char と UTF-16 の nchar は、同じ文字セット (Unicode 文字データベース) の 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 の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示