LIKE 述部

LIKE 述部は、ある一定のパターンをもったストリングを探索するものです。 パターンは、特殊な意味のある下線とパーセント記号を使ったストリングによって指定されます。 パターンでは後続ブランクもパターンの一部です。

Read syntax diagramSkip visual syntax diagrammatch-expressionNOTLIKEpattern-expressionESCAPEescape-expression

引数のうちのいずれかの値が NULL 値である場合、LIKE 述部の結果は不明になります。

match-expression (一致式)、 pattern-expression (パターン式)、 および escape-expression (エスケープ式) の値は、 互換性のある文字ストリング式です。 サポートされる文字ストリング式のタイプは、引数ごとに少々異なります。式の有効なタイプは、各引数の説明で示します。 式の有効なタイプは、各引数の説明の中に示します。

どの式も特殊タイプを生成するものであってはなりません。 ただし、特殊タイプをそのソース・タイプへキャストする関数は可能です。

一致式
特定の文字パターンに適合するかどうか調べる対象のストリングを指定する式。
LIKE パターン式
一致すべき基準となるストリングを指定する式。
この式は、match-expression と同様の方法で指定できます。ただし、以下の制約事項があります。
  • 式のエレメントに、CLOB または DBCLOB のタイプを使うことはできません。 また、BLOB ファイル参照変数は使用できません。
  • pattern-expression の実際の長さは、32 672 バイトを超えてはなりません。
LIKE 述部について簡単に説明すると、 これは match-expression の値のための適合基準を指定するために使用されるパターンです。 これには以下の規則があります。
  • 下線文字 (_) は、任意の 1 文字を表します。
  • パーセント記号 (%) は、ゼロ個以上の文字のストリングを表します。
  • その他の文字は、その文字自身を表します。

pattern-expression に下線またはパーセント文字を使用する必要がある場合は、パターンの中で下線文字またはパーセント文字の前に置く文字を escape-expression で指定します。

以下に、LIKE 述部の使用に関する 厳密な説明 を示します。 この説明では、 escape-expressionの使用を無視することに注意してください。その使用については後述します。
  • mmatch-expression の値を示し、 ppattern-expressionの値を示します。 ストリング p は、一連の最小数のサブストリング指定子として解釈され、p の各文字は正確に 1 つのサブストリング指定子の一部となります。 サブストリング指定子とは、下線、パーセント記号、または下線およびパーセント記号以外の任意の空でない一連の文字です。
    m または p が NULL 値の場合、述部の結果は不明です。 それ以外の場合の結果は、真か偽のどちらかになります。 mp の両方が空ストリングの場合、 または以下のようにして m をサブストリングにパーティション化したものが存在する場合、 結果は真になります。
    • m のサブストリングがゼロ個以上の連続する文字の並びで、 m の各文字が正確に 1 つのサブストリングの一部である。
    • n 番目のサブストリング指定子が下線の場合、 mn 番目のサブストリング指定子は任意の 1 文字である。
    • n 番目のサブストリング指定子がパーセント記号の場合、 mn 番目のサブストリング指定子は 0 個以上の文字の並びである。
    • n 番目のサブストリング指定子が下線でもパーセント記号でもない場合、 mn 番目のサブストリングは、 対応するサブストリング指定子と等しく、同じ長さである。
    • m のサブストリングの数は、 サブストリング指定子の数と同じである。

    したがって、p が空ストリングで、 m が空ストリングでない場合、結果は偽になります。 同様に、m が空ストリングで、 p が空ストリングでない (パーセント記号だけから成るストリングを除く) 場合、 結果は偽になります。

    述部 m NOT LIKE p は、 検索条件 NOT (m LIKE p) と同等です。

escape-expression が指定されている場合、 直後にエスケープ文字、下線文字、またはパーセント記号文字が続くのでない限り、 pattern-expression の中に、 escape-expression で指定されるエスケープ文字が入っていてはなりません (SQLSTATE 22025)。

match-expression が MBCS データベースの文字ストリングの場合、 それには混合データを収容することができます。 この場合は、パターン内で SBCS 文字と非 SBCS 文字の両方を使用することができます。 非 Unicode データベースの場合、パターンの中の特殊文字は、以下のようにして解釈されます。
  • SBCS の半角下線文字は、1 つの SBCS 文字を表します。
  • 非 SBCS の全角下線文字は、1 つの非 SBCS 文字を表します。
  • SBCS の半角または非 SBCS の全角パーセント記号文字は、0 以上の SBCS または非 SBCS 文字を表します。

Unicode データベースでは、「単一バイト」文字と「非単一バイト」文字の間に実質的な区別はありません。 UTF-8 形式は Unicode 文字の 「混合バイト」 方式ですが、UTF-8 では、SBCS 文字と非 SBCS 文字の間に実質的な区別がありません。 UTF-8 フォーマットでは、文字のバイト数に関係なく、すべての文字が Unicode 文字になります。

Unicode GRAPHIC 列では、半角下線文字 (U&'¥005F') や半角パーセント記号文字 (U&'¥0025') を含め、補足文字以外のすべての文字が 2 バイト幅になります。 Unicode データベースの場合、パターンの中の特殊文字は次のように解釈されます。
  • 文字ストリングでは、半角下線文字 (X'5F') または全角下線文字 (X'EFBCBF') が 1 つの Unicode 文字を表し、 半角パーセント記号文字 (X'25') または全角パーセント記号文字 (X'EFBC85') が 0 以上の Unicode 文字を表します。
  • GRAPHIC ストリングでは、半角下線文字 (U&'¥005F') または全角下線文字 (U&'¥FF3F') が 1 つの Unicode 文字を表し、 半角パーセント記号文字 (U&'¥0025') または全角パーセント記号文字 (U&'¥FF05') が 0 以上の Unicode 文字を表します。
  • ロケールに依存する UCA ベースの照合が有効である場合に、特殊文字として認識されるためには、下線文字および % 記号文字の後に、スペースなしで表記する記号 (発音区別符号) を続けてはなりません。 例えば、パターン U & '% \030 0' (% 記号文字の後にスペース以外の抑音符号が続く) は、ゼロ個以上の Unicode 文字の後に抑音符号が付いた文字が続く検索としてではなく、 パーセント記号文字、非スペーシング抑音符号の結合 の検索として解釈されます。

1 つの Unicode 補足文字は、Unicode グラフィック列で、2 ポイントのグラフィック・コードとして保管されます。 Unicode グラフィック列内の Unicode の補足文字を一致させるためには、データベースが、ロケールに依存する UCA ベースの照合を使用する場合は下線 1 つを、その他の場合は下線 2 つを使用します。 Unicode 文字列内の Unicode の補足文字に一致させるためには、すべての照合に下線 1 つを使用します。 ロケールに依存する UCA ベースの照合をデータベースが使用する場合、スペースなしで結合される文字が 1 つ以上後続する基本文字と一致させるためには、下線 1 つを使用します。 その他の場合は、スペースなしで表記する文字に基本文字を加えた数の下線を使用します。

エスケープ式
これはオプションの引数であり、 pattern-expression 内での下線 (_) 文字とパーセント (%) 文字の持つ特別な意味を変更するために使用する文字を指定する式です。 これにより、実際にパーセントや下線文字の入った値との一致を調べるために LIKE 述部を使うことができます。
この式は、以下のいずれかによって指定できます。
  • 定数
  • 特殊レジスター
  • グローバル変数
  • ホスト変数
  • 上記オペランドのいずれかを指定されたスカラー関数
  • 上記リスト項目のいずれかを連結する式
以下の制約があります。
  • 式のエレメントに、CLOB または DBCLOB のタイプを使うことはできません。 また、BLOB ファイル参照変数は使用できません。
  • 文字の列の場合、式の結果は 1 文字、つまりちょうど 1 バイト入ったバイナリー・ストリングになります (SQLSTATE 22019)。
  • GRAPHIC 列の場合、式の結果は 1 つの文字になります (SQLSTATE 22019)。
  • 式の結果をスペースなしの結合文字シーケンス (U&'¥0301'、結合揚音アクセント、など) にすることはできません。

パターン・ストリングにエスケープ文字が入っている場合、 下線、パーセント記号、またはエスケープ文字は、 それ自体のリテラル・オカレンスを表すことができます。 これは、その文字の前に奇数個の連続したエスケープ文字がある場合です。 そうでない場合は当てはまりません。

パターンの中で、連続するエスケープ文字の並びは以下のように扱われます。
  • S がそのような並びであり、 エスケープ文字のより長い連続の一部分ではないものとします。 また、S が合計 n 個の文字を収めているものとします。 このとき、S に適用される規則は、n の値により以下のように異なります。
    • n が奇数の場合、S の後には下線またはパーセント記号がなければなりません (SQLSTATE 22025)。 S とその後に続く文字は、 エスケープ文字の (n-1)/2 個のリテラル・オカレンスの後に下線記号またはパーセント記号のリテラル・オカレンスが続くことを表します。
    • n が偶数の場合、S はエスケープ文字の n/2 個のリテラル・オカレンスを表します。 n が奇数の場合とは異なり、S でパターンが終了する場合もあります。 S でパターンが終了しない場合、S の後にはどんな文字が続いても構いません (ただし、 S はエスケープ文字のより長い連続の一部分ではないという前提に違反するため、 当然エスケープ文字は除外されます)。 S の後に下線記号またはパーセント記号が続く場合、 その文字には特別な意味があります。
以下は、エスケープ文字 (この場合は、円記号 (¥)) が連続して出現する場合にどうなるかを示しています。
パターン・ストリング
実際のパターン
\%
パーセント記号
\\%
1 つの円記号の後にゼロ個以上の任意の文字が続く
\\\%
1 つの円記号の後に 1 つのパーセント記号が続く
比較で使用されるコード・ページは、 match-expression の値のコード・ページに基づいて決定されます。
  • match-expression の値が変換されることはありません。
  • pattern-expression のコード・ページが match-expression のコード・ページと異なる場合は、pattern-expression の値が match-expression のコード・ページに変換されます。ただし、どちらかのオペランドが FOR BIT DATA と定義されているかバイナリー形式である場合を除きます (その場合は変換されません)。
  • escape-expression のコード・ページが match-expression のコード・ページと異なる場合は、escape-expression の値が match-expression のコード・ページに変換されます。ただし、どちらかのオペランドが FOR BIT DATA と定義されているかバイナリー形式である場合を除きます (その場合は変換されません)。

  • 末尾ブランクの数は、 match-expressionpattern-expression のどちらでも重要です。 ストリング同士が同じ長さでない場合に、短いほうのストリングにブランクが埋め込まれることはありません。 例えば、'PADDED ' LIKE 'PADDED' という式は、一致していないことになります。
  • LIKE 述部でパラメーター・マーカーをパターンとして指定した場合に、 そのパラメーター・マーカーを固定長文字のホスト変数に置き換える場合は、 正しい長さのホスト変数値を指定しなければなりません。 正しい長さを指定しないと、所定の結果が SELECT から戻されません。
    例えば、ホスト変数を CHAR(10) と定義した場合に、そのホスト変数に値 WYSE% を割り当てると、 割り当ての際にそのホスト変数はブランクで埋め込まれます。 以下のパターンが使用されます。
    'WYSE%     '
    データベース・マネージャーは、 WYSE で始まって 5 つのブランク・スペースで終わるすべての値を検索します。 WYSE で始まる値だけを検索するつもりの場合は、ホスト変数に値 WSYE%%%%%% を割り当てます。
  • パターン・マッチングには、データベースの照合が使用されます。ただし、どちらかのオペランドが FOR BIT DATA で定義されている場合は除きます。その場合は、バイナリー比較によってパターン・マッチングが行われます。

  • PROJECT 表の PROJNAME 列で "SYSTEMS" というストリングを探索します。
      SELECT PROJNAME FROM PROJECT
        WHERE PROJECT.PROJNAME LIKE '%SYSTEMS%'
  • EMPLOYEE 表の FIRSTNME 列で、先頭の文字が "J" で、長さがちょうど 2 文字のストリングを探索します。
      SELECT FIRSTNME FROM EMPLOYEE
        WHERE EMPLOYEE.FIRSTNME LIKE 'J_'
  • EMPLOYEE 表の FIRSTNME 列で、先頭の文字が "J" で、任意の長さのストリングを探索します。
      SELECT FIRSTNME FROM EMPLOYEE
        WHERE EMPLOYEE.FIRSTNME LIKE 'J%'
  • CORP_SERVERS 表で、LA_SERVERS 列のストリングのうち、 CURRENT SERVER 特殊レジスターの値と一致するものを探索します。
      SELECT LA_SERVERS FROM CORP_SERVERS
        WHERE CORP_SERVERS.LA_SERVERS LIKE CURRENT SERVER
  • 表 T の列 A の文字シーケンス で始まるすべてのストリングを検索します。
      SELECT A FROM T
        WHERE T.A LIKE '\_\\%' ESCAPE '\'
  • 一致およびパターンのデータ・タイプ (どちらも BLOB) と互換性のある 1 バイトのエスケープ文字を指定するには、バイナリー・ストリング定数を使用します。
      SELECT COLBLOB FROM TABLET
        WHERE COLBLOB LIKE :pattern_var ESCAPE BX'0E'
  • 大/小文字を区別しない照合 CLDR181_LEN_S1 で定義された Unicode データベース内で、"Bill" で始まるすべての名前を検索します。
    SELECT NAME FROM CUSTDATA WHERE NAME LIKE 'Bill%'
    この照会は、名前「Bill Smith」「billy simon」、および「BILL JONES」を戻します。