16.20 - Unicode区切り文字リテラル - Teradata Vantage NewSQL Engine

Teradata Vantage™ データ タイプおよびリテラル

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1143-162K-JPN

目的

式でUnicode区切り文字リテラル値を宣言します。

構文



Server Character Set Specification
サーバー文字セットの任意選択の指定。次のいずれかにすることができます。
  • _Latin
  • _Unicode
  • _KanjiSJIS
  • _Graphic
'Unicode_string_body'
次の組み合わせで構成される、単一引用符で囲まれたゼロ文字以上の文字列。
  • 単一引用符( ' )またはUnicodeエスケープ文字以外の文字
  • 2つの連続した単一引用符

    2つの連続した単一引用符は、Unicode区切り文字リテラルに1つの単一引用符文字を含めるために使用します。

  • 2つの連続したUnicodeエスケープ文字

    2つの連続したエスケープ文字は、区切り文字リテラルにエスケープ文字を含めるために使用します。

  • 1つのUnicodeエスケープ文字とその後の4桁の16進数(16進数字は0~9、a~f、またはA~Fの文字)

    4桁の16進数はUnicode BMP(基本多言語面)文字を表わします。先行ゼロが必要です。

  • 1つのUnicodeエスケープ文字とその後の正符号(+)および6桁の16進数(16進数字は0~9、a~f、またはA~Fの文字)

    6桁の16進数はUnicode BMP文字または補助文字を表わします。先行ゼロが必要です。

Unicodeエスケープ文字は、UESCAPE句で指定されます。
U&キー文字列の直後に'Unicode_string_body'を指定する場合、最初の単一引用符の前に埋め込み文字があってはなりません。
複数の文字列をスペース (U+0020)で区切って連結するには、'Unicode_string_body'を連続して使用します。
UESCAPE 'Unicode_esc_char'
区切り文字リテラルでUnicodeエスケープ文字として使用される、セッション文字セットからの単一文字。
この文字は表記可能なASCII範囲のUnicode文字(U+0021~U+007E)にする必要がありますが、次の例外があります。
  • SPACE (U+0020)
  • QUOTATION MARK (U+0022)
  • APOSTROPHE (U+0027)
  • PLUS SIGN (U+002B)
  • 16進数の数字(0~9、a~f、またはA~F)
    • U+0030~U+0039
    • U+0041~U+0046
    • U+0061~U+0066
YEN SIGN(U+00A5)およびWON SIGN(U+20A9)をUnicodeエスケープ文字として指定することもできます。

ANSI準拠

Unicode区切り文字リテラルはANSI SQL:2011に一部準拠しています。ANSI SQL:2011規格にはUESCAPE句は不要で、Unicode_esc_charの能力を高めることができます。

最大長

Unicode区切り文字リテラルは、最大31000文字のUnicode_string_bodyで構成できます。

データ型

Unicode区切り文字リテラルのデータ型はVARCHAR(n) CHARACTER SET UNICODEで、nはUnicode文字のリテラルの解決済みの長さです。

VARCHAR(n)型の詳細については、VARCHARデータ型を参照してください。

使用上の注意

Unicode区切り文字リテラルは、一般に端末キーボードで直接入力できない文字や現在のセッション文字セットでは使用できない文字を含む文字列を挿入する際に便利です。

Unicodeのパス スルーが有効なセッションでは、Unicode区切り文字リテラルの非文字はFFFD置換文字に変換されます。Unicode Pass Throughが無効なセッションでは、エラーが返されます。非文字は、永久に内部使用のため予約されているUnicode Pass Throughです。

例:
SELECT U&'#FFFE' UESCAPE '#';
SELECT U&'#+01FFFF' UESCAPE '#';

Unicode区切り文字リテラル内にサロゲート ペアと不適切なサロゲートがあると、Unicode Pass Throughが有効かどうかにかかわらずエラーになります。

例:
SELECT U&'#D800#DC00' UESCAPE '#';
SELECT U&'#+00D800#+00DC00' UESCAPE '#';
SELECT U&'#+00D800#+00D801' UESCAPE '#';
SELECT U&'#+00D800' UESCAPE '#';
Unicodeの補助文字は、Unicode Pass Throughが有効なとき任意の文字セットで許可されます。
.set session charset 'ascii'
set session character set unicode pass through on;
sel u&'#+010000' uescape '#';
Unicodeの補助文字は、Unicode Pass Throughが無効なとき任意の文字セットで許可されません。次のSELECT文はエラーを返します。
.set session charset 'utf8'
set session character set unicode pass through off;
sel u&'#+010000' uescape '#';

Unicode Pass Throughの詳細については、<Teradata Vantage™ NewSQL Engine国際文字セット サポート、B035-1125>を参照してください。

作成するアプリケーションをANSI準拠かつ移植可能なものとするには、'hexadecimal digits'XCの形式の既存の16進数文字リテラルをUnicode文字リテラルで置き換えることができます。

例: Unicode区切り文字リテラル

次のテーブルについて考慮します。

CREATE TABLE TextTable
   (IDNum INTEGER
   ,Ustring VARCHAR(10) CHARACTER SET UNICODE);

次の文はUnicode区切り文字リテラルを使用して、文字列をUstring列に挿入します。番号記号(#)をUnicodeエスケープ文字として使用しています。

INSERT TextTable (10, _Unicode U&'#8CC7#6599#5009#5132' UESCAPE '#');

次の文は2つの文字列を連結して、「855-34-9729」をUstring列に挿入します。

INSERT TextTable (11, U&'855-34-' '9729' UESCAPE '%');

次の文は、TextTableテーブルの、Ustring列内の文字列が空の文字列である場所から、すべての行を選択します。

SELECT * FROM TextTable WHERE Ustring = U&'' UESCAPE '&';

例: Unicode BMPおよび補助文字を含むリテラル

4または6桁の構文のいずれかを使用してUnicode BMP文字を指定できます。先行ゼロが必要なことに注意してください。

SELECT U&'#0041' UESCAPE '#'
SELECT U&'#+000041' UESCAPE '#'

6桁の構文を使用してUnicode補助文字を指定できます。先行ゼロが必要なことに注意してください。

SELECT U&'#+020000' UESCAPE '#'
SELECT U&'#+010000' UESCAPE '#'

例: エラー: サロゲート コード ポイントを含むリテラル

文字LINEAR B SYLLABLE B008 A (U+010000)は、次のように表わすことができます。
SELECT U&'#+010000' UESCAPE '#'
この文字は、(UTF-16に基づく)内部UNICODE形式の16ビット サロゲート コード ポイントを2つ必要とします。クエリーSELECT CHAR2HEXINT(U&'#+010000' UESCAPE '#');は次の文字列を生成します。
'D800DC00'
ただし、サロゲート コード ポイントはUnicode区切り文字リテラルで使用できないため、次のクエリーはエラーを返すことに注意してください。
SELECT CHAR2HEXINT(U&'#D800#DC00' UESCAPE '#');