LIKE 述部

LIKE 述部は、特定のパターンを持つストリングを検索します。 検索するパターンはストリングで指定します。下線およびパーセント記号は、パターンを指定するストリングの中で特別な意味を持ちます。 パターン内の末尾ブランクは、パターンの一部です。

構文図を読む構文図をスキップする
>>-match-expression--+-----+--LIKE--pattern-expression--+---------------------------+-><
                     '-NOT-'                            '-ESCAPE--escape-expression-'   

いずれかの引数の値が NULL の場合、LIKE 述部の結果は未知になります。

一致式パターン式、 およびエスケープ式 は、ストリングまたは数値を識別しなければなりません。 数値引数は、述部の評価の前に文字ストリングにキャストされます。 数値から文字ストリングへの変換の詳細については、VARCHARを参照してください。 一致式パターン式、および エスケープ式 の値は、すべてが 2 進スト リングであるか、どれも 2 進ストリングでないか、のどちらかでなければな りません。 この 3 つの引数には、文字ストリングとグラフィック・ストリングを混合 して含めることができます。

どの式も特殊タイプを生成することはできませんが、特殊タイプをソース・タイプにキャストする関数を使用することは可能で す。

述部のオペランドが SBCS データ、混合データ、または Unicode データであり、 そのステートメントが実行される時点で有効な照合順序が *HEX でない場合は、 そのオペランドの比較は、オペランドの重み付けされた値を使用して行われます。 値の重み付けは、該当の照合順序に基づいています。 ICU 照合順序を LIKE 述部と一緒に使用することはできません。

文字ストリングの場合は、以下の説明における文字パーセント記号、 および下線 という用語は、1 バイト文字を指しています。 グラフィック・ストリングの場合は、この用語は 2 バイトまたは Unicode 文字を指しています。 2 進ストリングの場合、この用語は、これらの 1 バイト文字のコード・ポイントを指しています。

match-expression
所定の文字パターンに適合するかどうかを調べるストリング を示す式。
LIKE pattern-expression
突き合わせに使用するストリングを示す式。

簡単な説明: LIKE パターンについて、以下に簡単に説明します。

  • 下線記号 (_) は、任意の 1 文字を表します。
  • パーセント記号 (%) は、ゼロまたは 1 つ以上の文字から構成されるストリングを表します。
  • 上記以外の文字は、すべてその文字自身を表します。

pattern-expression に下線文字またはパーセント文字を含める必要がある 場合、escape-expression を使用して、パターン内の下線文字または パーセント文字のいずれかの前に置く文字を指定します。

厳密な説明: x一致式 の値を表し、 yパターン式 の値を表すものとします。

ストリング y は、最小数の一連のサブストリング指定子として解釈されるので、 y の各文字は、厳密に 1 つのサブストリング指定子の一部となります。 サブストリング指定子とは、下線、パーセント記号、または下線とパーセント記号以外の空でない一連の任意の文字を指します。

x または y が NULL 値の場合は、述部の結果は不明です。 それ以外の場合、結果は真または偽のいずれかになります。 xy の両方が空ストリングの場合、 あるいは以下のようなサブストリングに x を区分化できる場合、結果は真になります。

  • x のサブストリングがゼロ個または 1 個以上の連続する一連の文字である場合に、 x の各文字が厳密に 1 つのサブストリングの一部である。
  • n 番目のサブストリング指定子が下線の場合、 xn 番目のサブストリング指定子は任意の 1 文字である。
  • n 番目のサブストリング指定子がパーセント記号の場合、 xn 番目のサブストリング指定子は 0 個以上の文字の並びである。
  • n 番目のサブストリング指定子が下線でもパーセント記号でもない場合に、 xn 番目のサブストリングが、対応するサブストリング指定子と等しく、 かつ対応するサブストリング指定子と同じ長さである。
  • x のサブストリングの数が、サブストリング指定子の数と同じである。

したがって、y が空のストリングで、 x が空のストリングでない場合は、結果が偽になります。 同様に、x が空ストリングで、y が空ストリングでない (% 記号以外が含まれている) 場合も、結果は偽になります。

x NOT LIKE y という述部は、 NOT(x LIKE y) という検索条件と同等です。

必要な場合、一致式パターン式、 およびエスケープ式 の CCSID は、一致式パターン式 の間の互換性のある CCSID に変換されます。

混合データ: 列が混合データである場合、 パターンには SBCS 文字と DBCS 文字の両方を含めることができます。 パターン内の特殊文字は次のように解釈されます。

  • SBCS の下線は、1 つの SBCS 文字を示します。
  • DBCS の下線は、1 つの DBCS 文字を示します。
  • パーセント記号 (SBCS または DBCS) は、任意のタイプ (SBCS または DBCS) の任意の個数の文字を示します。
  • 一致式パターン式 の余分なシフト文字は無視されます。 1

Unicode データ: Unicode では、パターン内の特殊文字は次のように解釈されます。

  • SBCS または DBCS の下線は 1 文字を表します (1 文字は 1 バイトまたは複数バイト)。
  • パーセント記号 (SBCS または DBCS) は、ゼロ個または 1 つ以上の文字のストリングを表します (1 文字は 1 バイトまたは複数バイト)。

LIKE 述部を Unicode データで使用する場合、 Unicode の % 記号と下線は、次の表に示されているコード・ポイントを使用します。

文字 UTF-8 UTF-16 または UCS-2
半角 % X'25' X'0025'
全角 % X'EFBC85' X'FF05'
半角 _ X'5F' X'005F'
全角 _ X'EFBCBF' X'FF3F'

全角または半角の % はゼロ個以上の文字にマッチングします。 全角または半角の _ 文字は厳密に 1 つの文字にマッチングします。 (EBCDIC データの場合、全角の _ 文字は 1 つの DBCS 文字にマッチングします。)

2 進データ: 列が 2 進データである場合、パターンにはバイトが含まれます。パターン内の特殊バイトは次のように解釈されます。
  • SBCS 下線のコード・ポイント (X'6D') は、1 バイトを参照します。
  • SBCS パーセントのコード・ポイント (X'6C') は、任意数のバイトを参照します。

パラメーター・マーカー:

LIKE 述部で指定したパターンがパラメーター・マーカーであり、固定長文字 の変数を使用してそのパラメーター・マーカーを置き換えるときは、その変数の値に正しい長さを指定します。 正しい長さが指定されない場合、意図した結果が選択で戻されないことになります。

例えば、変数が CHAR(10) として定義されている場合、その 変数に WYSE% という値を割り当てると、余白にはブランクが埋め込まれます。使用されるパターンは、次のとおりです。

   'WYSE%     '

このパターンは、WYSE で始まり、5 つのブランク・スペースで終わるすべ ての値の検索をデータベース・マネージャーに要求します。'WYSE' で始まる値だけを検索したい場合は、 変数に 'WYSE%%%%%%' の値を割り当てる必要があります。

ESCAPE escape-expression
パターン式の下線 (_) 文字とパーセント (%) 文字の特 殊な意味を変更するのに使用する文字を指定する式。これにより、LIKE 述部を使用して、実際にパーセント文字や下線文字を含ん でいる値を突き合わせることが可能になります。ESCAPE 文節と エスケープ式 の 使用には、次の規則が適用されます。
  • エスケープ式 は、長さが 1 の ストリングでなければならない。2
  • パターン式 には、エスケープ文字の後にエスケー プ文字、パーセント記号、または下線が続く場合を除き、エスケープ文字を 含めてはならない。

    例えば、「+」が拡張文字の場合、「++」、「+_」、または「+%」以外の「+」が パタ ーン式に現れると、エラーになります。

  • エスケープ式 は、パラメーター・ マーカーでもかまいません。

次の例は、連続したエスケープ文字 (この場合は、正符号 (+)) の効 果を示しています。

パターン・ストリング 実際のパターン
+% パーセント記号
++% 正符号の後にゼロ個以上の任意の文字が続く
+++% 正符号の後にパーセント記号が続く

例 1

PROJECT 表の PROJNAME 列で「SYSTEMS」というストリングを検索します。

   SELECT PROJNAME
     FROM PROJECT
     WHERE PROJECT.PROJNAME LIKE '%SYSTEMS%'

例 2

EMPLOYEE 表の FIRSTNME 列で、先頭の文字が「J」で長さがちょうど 2 文字のストリングを検索します。

SELECT FIRSTNME
     FROM EMPLOYEE
     WHERE EMPLOYEE.FIRSTNME LIKE 'J_'

例 3

この例で、

SELECT *
     FROM TABLEY
     WHERE C1 LIKE 'AAAA+%BBB%' ESCAPE '+'

'+' はエスケープ文字であり、この検索が、'AAAA%BBB' で始まるストリングの検索であることを示しています。'+%' は、パターンの '%' の 1 つのオカレンスとして解釈されます。

例 4

次の EBCDIC における例で、COL1 は混合データであると想定しています。この表は、2 列目からの COL1 値を使用して 1 列目の述部を評価 した場合の結果を示しています。

2 列目からの COL1 値を使用して 1 列目の述部を評価
した場合の結果。

例 5

ソース・データ・タイプが CHAR(5) の ZIP_TYPE という名前の特殊タイプ が存在し、ある表 TABLEY にデータ・タイプが ZIP_TYPE の ADDRZIP 列が 存在するものと想定します。次のステートメントは、ZIP コード (ADDRZIP) が '9555' で始まっている行 を選択します。

   SELECT *
     FROM TABLEY
     WHERE CHAR(ADDRZIP) LIKE '9555%'

例 6

サンプル表 EMP_RESUME の RESUME 列は、CLOB として定義されています。変数 LASTNAME の値が 'JONES' である場合、次のステートメントは、列内にストリング JONES が見つかった場合、RESUME 列を選択します。

   SELECT RESUME
     FROM EMP_RESUME
     WHERE RESUME LIKE '%'||LASTNAME||'%'
1 余分なシフト文字は通常は無視されます。 しかし、それらが確実に無視されるようにするには、IGNORE_LIKE_REDUNDANT_SHIFTS 照会属性を指定してください。 照会属性の設定の詳細については、 データベース・パフォーマンスおよび Query 最適化を参照してください。
2 NULL で終了する場合は、長さが 2 の C 文字ストリング変数を指定でき ます。