16.20 - 文字列リテラル - Teradata Vantage NewSQL Engine

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

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

目的

式の中で文字列リテラルの値を宣言します。

構文



_character_set
文字列リテラルに関連付けられる文字セットの名前。
  • _Latinは、文字列中の各文字がLATIN文字セットのレパートリー内にあることを示します。
  • _Unicodeは、文字列内の各文字がUNICODE文字セットのレパートリー内にあることを示します。
  • _KanjiSJISは、文字列中の各文字がKANJISJIS文字セットのレパートリー内にあることを示します。
  • _Graphicは、文字列中の各文字がGRAPHIC文字セットのレパートリー内にあることを示します。
_character_setが指定されていない場合のデフォルトは_Unicodeです。
_Kanji1の識別子は使用しないでください。これは、エラーが生成されます。
string
文字列リテラルです。

ANSI準拠

文字リテラルは、ANSI SQL:2011に準拠しています。

定義

文字リテラルは、0個以上の英数字文字を単一引用符で囲んだものです。復帰改行文字およびスペース文字は、2つの単一引用符の間に入れることができます。文字リテラルの合計長は0~31000バイトです。

文字リテラルは、Unicode Pass Throughを有効にしたセッションで使用するためにパス スルー文字(PTC)を含むことができます。PTCを含む文字リテラルは、アカウント文字列で使用することはできません。アカウント文字列は、オブジェクト名として検証され、オブジェクト名はPTCを含むことができません。Unicode Pass ThroughとPTCについては、<Teradata Vantage™ NewSQL Engine国際文字セット サポート、B035-1125>を参照してください。

長さ0の文字リテラルは、2つの連続した単一引用符( '' )で表現されます。

単一引用符( ' )を文字リテラルに含めるには、連続した2つの単一引用符( '' )を使用します。

複数の連続した文字リテラルは、文字列を連結したものとして扱われます。

文字リテラル データ型

文字リテラルのデータ型はVARCHAR(n) CHARACTER SET UNICODEです(nはリテラルの長さ)。

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

文字リテラルIDとKANJI1データ

次の文字データ型リテラル識別子をKANJI1文字列に割り当てることができます。
  • _Latin ‘string’
  • _Unicode ‘string’
  • _Graphic ‘string’
  • _KanjiSJIS ‘string’

変換は現在のセッション文字セットに基づき、セッション文字セットはBTEQコマンドSET SESSION CHARSETを使用して確立できます。

これらのリテラルの割り当ての詳細については、<Teradata Vantage™ SQL関数、式、および述部、B035-1145>の「データ型の変換」を参照してください。

KANJI1のサポートは廃止されました。KANJI1をデフォルトの文字セットとして使用することはできません。システムはデフォルトのKANJI1文字セットをUNICODE文字セットに変更します。KANJI1の新規オブジェクトの作成は、高度に制限されています。KANJI1を使用するクエリーやアプリケーションの多くは、従来通り動作しますが、KANJI1を使用するサイトはできるだけ早く別の文字セットに変換する必要があります。

英大文字/英小文字区別の指定

文字列のCASESPECIFIC属性によって、文字列の比較のルールが決定されます。文字列リテラルの大文字小文字がデフォルトによって指定可能かどうかは、実行用の文字列をセッションで構文解析するときのモードによって決まります。

モード 文字列の大文字小文字の区別のデフォルト
ANSI CASESPECIFIC
Teradata NOT CASESPECIFIC

CHARACTERまたはVARCHAR CHARACTER SET GRAPHICタイプの文字データは例外で、常にCASESPECIFICです。

例: 単純な文字列

以下に、有効な文字リテラルの例を示します。

'Los Angeles'
''

例: 単一引用符を含む文字列

文字リテラルの中に単一引用符を入れるには、文字リテラルの中の単一引用符を二重にします。

'He said ''yes'' to her question'

例: 複数セグメントからなる文字リテラル

複数の文字列は、それらを連結して1つの文字リテラルにしたものとして扱われます。

('AA' 'BB') is ('AA' || 'BB')
(_Unicode 'AA' _Latin 'BB') is (_Unicode 'AA' || _Latin 'BB')

例: 文字セットの指定

リテラル中の文字がLATIN文字セット レパートリー内にあることを示すには、_Latin IDを使用します。

CREATE TABLE table1(Name CHAR(30));
INSERT INTO table1 (_Latin 'Sandoval');

_Latin IDを使っても、常にUNICODEである文字リテラル データ型のサーバー文字セットは変わらないことに注意してください。

SELECT TYPE (_Latin 'Sandoval');

戻り値:

Type('Sandoval')
---------------------------------
VARCHAR(8) CHARACTER SET UNICODE;

例: 文字リテラルのサーバー文字セットの変換

文字リテラルのデータ型およびサーバー文字セットは、常にVARCHAR(n) CHARACTER SET UNICODEです(nはリテラルの長さ)。

場合によっては、文字リテラルをUNICODEから別のサーバー文字セットに変換する必要が生じます。

例えば、2つの文字列の16進数表現を比較する必要が生じたとします。文字列を16進数で表現するには、CHAR2HEXINTを使用します。

比較しようとしている文字列の1つは、文字リテラル'a'であると仮定します。以下の文は、'a'の16進数表現を戻します。

SELECT CHAR2HEXINT('a');

その結果は'0061'となりますが、これはUNICODEサーバー文字セット内の'a'の16進数表現であり、そこでは文字ごとに2バイトずつ使用されています。

比較しようとしているもう一方の文字列は、CHAR(1) CHARACTER SET LATINと定義されている列内にあるとします。

CREATE TABLE table1
  (column1 CHAR(1) CHARACTER SET LATIN
  ,column2 INTEGER);
INSERT INTO table1 ('a', 1001);

以下の文は、column1の16進数表現を戻します。

SELECT CHAR2HEXINT(column1);

その結果は'61'となりますが、これはLATINサーバー文字セット内の'a'の16進数表現であり、そこでは文字ごとに1バイトずつが使用されています。

以下のクエリーは、2つの文字列を比較しています。

SELECT column2 FROM table1
WHERE CHAR2HEXINT('a') = CHAR2HEXINT(column1);

結果は空のセットになります。それは、CHAR2HEXINT('a')の結果は'0061'であり、CHAR2HEXINT(column1)の結果は'61'だからです。

このような状況の場合、TRANSLATEを使って文字セットの一方のセットを変換して、もう一方の文字列のサーバー文字セットに合わせることができます。例えば、次のようになります。

SELECT column2 FROM table1
WHERE CHAR2HEXINT( TRANSLATE('a' USING UNICODE_TO_LATIN) ) =
CHAR2HEXINT(column1);

戻り値:

    column2
-----------
       1001