UNISTR (Transact-SQL)
適用対象:Azure SQL Database
UNISTR
では、文字列内の文字の Unicode エンコード値を指定できるため、Unicode 文字列リテラルがサポートされます。
UNISTR
は、Unicode 標準で定義されている入力式に対応する Unicode 文字を返します。
Unicode 文字のエスケープ シーケンスは、 \xxxx
または \+xxxxxx
の形式で指定できます。ここで、 xxxx
は有効な UTF-16 コードポイント値であり、 xxxxxx
は有効な Unicode コードポイント値です。 Unicode コード ポイントの値は、 Unicode コード チャートで検索できます。
NCHAR
などの関数と比較して、UNISTR
は Unicode 文字をより柔軟かつ包括的に処理する方法を提供します。 たとえば、NCHAR
では 1 つの Unicode 値を文字に変換できますが、UNISTR
は複数の Unicode 値とエスケープ シーケンスを処理するため、さまざまな Unicode 文字を含む複雑な文字列を簡単に操作できます。
構文
UNISTR ( 'character_expression' [ , 'unicode_escape_character' ] )
備考
UNISTR
の主な利点は次のとおりです。
Unicode エスケープ シーケンスのサポート:
UNISTR
では、エスケープ シーケンスを使用して Unicode 文字を指定できます入力型の の柔軟性:では、 文字 、nchar 、varchar 、nvarcharなど、さまざまな文字型サポートされます。 char および varchar データ型の場合、照合順序は有効な UTF-8 照合順序である必要があります。 カスタム エスケープ文字: Unicode 値を文字列文字セットに必要な変換を実行するカスタム エスケープ文字を定義できます。
コード ページのサポート
UNISTR
関数は従来のコード ページと互換性がありません。つまり、Unicode 以外の文字セットを使用する照合順序はサポートされていません。 従来のコード ページを含むこれらの照合順序は、次のクエリを使用して識別できます。
SELECT DISTINCT p.language,
p.codepage
FROM sys.fn_helpcollations() AS c
CROSS APPLY (VALUES (LEFT(c.name, CHARINDEX('_', c.name) - 1),
COLLATIONPROPERTY(c.name, 'codepage'))) AS p(language, codepage)
WHERE p.codepage NOT IN (
0 /* Unicode Only collation */,
65001 /* UTF-8 code page */
);
詳細については、「付録 G DBCS/Unicode マッピング 表 および 付録 H コード・ページを参照してください。
引数
'character_expression'
char、nchar、varchar、nvarchar など、任意の文字型の式。
char および varchar データ型の場合、照合順序は有効な UTF-8 照合順序である必要があります。 文字列リテラル、Unicode、UTF-16 コード ポイント値、またはその両方を指定できます。
N'unicode_escape_character'
ユーザー定義 Unicode エスケープ シーケンスを表す 1 文字。 指定しない場合、既定値は \
。
戻り値の型
長さと型が入力型に依存する文字列値。
例
A. UNISTR と NCHAR 関数を使用する
次の例では、すべて UNISTR
関数を使用して、Unicode 値を文字列文字セットに必要な変換を実行し、Unicode 文字の「口を開いた笑顔」を表示します。
データベースの照合順序は、入力が char または varchar データ型の場合
UNISTR
と NCHAR
の使用:
SELECT N'Hello! ' + NCHAR(0xd83d) + NCHAR(0xde00);
このサンプル例は、次のように記述することもできます。
SELECT UNISTR(N'Hello! \D83D\DE00');
SELECT UNISTR(N'Hello! \+01F603');
結果セットは次のとおりです。
-----------
Hello! 😃
B. ユーザー定義エスケープ文字で UNISTR 関数を使用する
次の例では、カスタムエスケープ文字を持つ UNISTR
関数を使用して、Unicode を文字列文字セットに必要な変換を実行します。
SELECT UNISTR(N'ABC#00C0#0181#0187', '#');
結果セットは次のとおりです。
-----------
ABCÀƁƇ
C. 文字列リテラルと Unicode コード ポイントを組み合わせて UNISTR 関数を使用する
次の例では、UNISTR
は、ユーザー定義のエスケープ文字 ($
) と UTF-8 照合順序を持つ varchar データ型で使用されます。 文字列リテラルと Unicode コードポイント値を組み合わせます。
SELECT UNISTR('I $2665 Azure SQL.' COLLATE Latin1_General_100_CI_AS_KS_SC_UTF8, '$');
結果セットは次のとおりです。
------------------
I ♥ Azure SQL.
D. UTF-8 制限を超える文字には UNISTR 関数を使用する
UTF-8 を超える文字セットを使用する必要がある場合は、COLLATE
句を使用して文字シーケンスを UTF-8 に変換する必要があります。 次に例を示します。
SELECT UNISTR('\306F\3044' COLLATE Latin1_General_100_BIN2_UTF8) AS Yes_in_Japanese_Hiragana;
結果セットは次のとおりです。
Yes_in_Japanese_Hiragana
------------------------
はい