17.10 - 大文字小文字の区別 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL関数、式、および述部

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1145-171K-JPN
Language
日本語 (日本)

Teradata SQL文の実行時にアクセスされたすべての文字データ (CLOBを除く) には、デフォルトによって、または明示的に指定することによって、CASESPECIFICまたはNOT CASESPECIFICの属性が与えられます。文字列の比較では、この属性によって大文字と小文字を区別して比較を行なうかどうかを決定します。CLOBには大文字小文字の区別が適用されません。

この属性は、ANSI SQL:2011互換ではありません。ANSIでは、すべての文字比較がCASESPECIFICと同等に行なわれます。

CASESPECIFIC属性は、NOT CASESPECIFIC属性より優先されます

条件 比較
どちらかの引数がCASESPECIFICの場合 英大文字/英小文字を区別して行なわれます。
両方の引数がNOT CASESPECIFICの場合 大文字小文字の区別なし

例外はGRAPHIC文字データで、この場合は常にCASESPECIFICになります。

次の方法で大文字小文字の区別の属性を文字列に適用します。
  • セッション用のデフォルトの大文字小文字の区別を使用する。
    セッション モード 大文字小文字の区別のデフォルト
    ANSI CASESPECIFIC
    Teradata NOT CASESPECIFIC。

    例外はGRAPHIC型の文字データで、この場合は必ずCASESPECIFICになります。

    大文字小文字の区別のデフォルトは、リテラルを含め、すべての文字データに適用されます。

  • CREATE TABLEまたはALTER TABLE文で、文字の列にCASESPECIFICまたはNOT CASESPECIFIC句を使用する。

    例:

    CREATE TABLE Students
      (StudentID INTEGER
      ,Firstname CHAR(10) CASESPECIFIC
      ,Lastname CHAR(20) NOT CASESPECIFIC);

    テーブルの列では、列が定義または変更されたときに、割り当てられた属性が伝達されます。 ただし、アクセスにおいてCASESPECIFICまたはNOT CASESPECIFIC句が使用される場合は異なります。

  • 比較で、CASESPECIFICまたはNOT CASESPECIFIC句を文字式に適用する。

    例えば、次の文ではCASESPECIFIC句を文字リテラルに適用します。

    SELECT * 
    FROM Students 
    WHERE Firstname = 'Ike' (CASESPECIFIC);

    この方法は、文字データの大文字小文字の区別のデフォルトを上書きする場合、あるいは文字の列が定義または変更されたときに割り当てられた大文字小文字の区別属性を上書きする場合に使用します。

大文字小文字を区別しない比較では、英小文字の1バイトのローマ字は英大文字に変換されてから、比較が始まります。作成された文字列はバイトごとに比較され、後ろに付けられた埋め込み文字は無視されます。

大文字小文字を区別しない比較では、小文字と大文字のキリル文字、ギリシャ文字、および全角のASCII文字は常に同等とみなされます。小文字と大文字のキリル文字、ギリシャ文字、および全角のASCII文字を区別するためには、明示的にCASESPECIFICの比較を宣言しなければなりません。

これらのオプションはKANJISJIS文字セットに対して機能します。その際、そのデータがまずUNICODE型に変換され、次いでオプションが適用されるかのように扱われます。