次の方法で共有


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 文字を含む複雑な文字列を簡単に操作できます。

Transact-SQL 構文表記規則

構文

UNISTR ( 'character_expression' [ , 'unicode_escape_character' ] )

備考

UNISTR の主な利点は次のとおりです。

  • Unicode エスケープ シーケンスのサポート: UNISTR では、エスケープ シーケンスを使用して Unicode 文字を指定できます

  • 入力型のの柔軟性: では、文字ncharvarchar、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'

charncharvarcharnvarchar など、任意の文字型の式char および varchar データ型の場合、照合順序は有効な UTF-8 照合順序である必要があります。 文字列リテラル、Unicode、UTF-16 コード ポイント値、またはその両方を指定できます。 では、varchar(max) と nvarchar(max)長さがサポートされます。

N'unicode_escape_character'

ユーザー定義 Unicode エスケープ シーケンスを表す 1 文字。 指定しない場合、既定値は \

戻り値の型

長さと型が入力型に依存する文字列値。

A. UNISTR と NCHAR 関数を使用する

次の例では、すべて UNISTR 関数を使用して、Unicode 値を文字列文字セットに必要な変換を実行し、Unicode 文字の「口を開いた笑顔」を表示します。 データベースの照合順序は、入力が char または varchar データ型の場合UTF-8 照合順序である必要があります。

UNISTRNCHAR の使用:

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
------------------------
はい