引数が文字タイプの場合、照合は論理文字に対して行なわれます。1バイト文字は1バイト文字と照合され、マルチバイト文字はマルチバイト文字と照合されます。照合を実行するには、両方の式の論理文字表現が同じでなければなりません。
引数のサーバー文字セットが同じものでない場合、INDEXは暗黙文字変換を行ないます。
CASESPECIFIC属性は、文字が一致するものとしてみなせるかどうかを左右します。
セッション モード | 文字列およびリテラルの大文字小文字の区別のデフォルト |
---|---|
ANSI | CASESPECIFIC。 |
Teradata | NOT CASESPECIFIC。 例外はGRAPHIC型の文字データで、この場合は必ずCASESPECIFICになります。 |
大文字小文字の区別のデフォルトを上書きするには、CREATE TABLEまたはALTER TABLEの中で文字の列に対してCASESPECIFICまたはNOT CASESPECIFIC句を適用することができます。
あるいは、CASESPECIFICまたはNOT CASESPECIFIC句をINDEX文字列引数に適用することができます。
条件 | 結果 |
---|---|
どちらかの引数の属性がCASESPECIFICの場合(デフォルトまたは明示指定によって) | シンプルなLatin文字は、文字が同じで、大文字小文字の区別も同じ場合にのみ、一致しているとみなされます。 |
両方の引数の属性がNOT CASESPECIFICの場合(デフォルトまたは明示指定によって) | 操作を開始する前に、一部の文字が大文字に変換されます。 文字が小文字のシンプルなLatin文字である場合は、操作が始まる前に、大文字に変換されます。 文字がLatin以外の1バイト文字、マルチバイト文字、または1バイト文字データとマルチバイト文字データとの間の移行を示すバイトである場合は、大文字に変換されません。 |
文字タイプ引数を使用している場合、INDEXによる文字の照合を大文字小文字を区別して行なうには、最低1つの引数にCASESPECIFIC句を指定します。 例えば、
SELECT Name FROM Employee WHERE INDEX(Name, 'X' (CASESPECIFIC)) = 1;
INDEXによる文字の照合を大文字小文字の区別を無視して行なうには、両方の引数にNOT CASESPECIFIC句を指定します。