SQL 解説書
>>-match-expression----+-----+--LIKE--pattern-expression-------->
'-NOT-'
>-----+----------------------------+---------------------------><
'-ESCAPE--escape-expression--'
LIKE 述部は、ある一定のパターンを含むストリングを探索するものです。
パターンは、特殊な意味のある下線とパーセント記号を使ったストリングによって指定されます。
パターンでは後続ブランクもパターンの一部です。
引き数の中に値がヌル値の引き数のものがある場合、
LIKE 述部の結果は不定になります。
match-expression (一致式)、
pattern-expression (パターン式)、
および escape-expression (エスケープ式) の値は、
互換性のある文字ストリング式です。
サポートされる文字ストリング式のタイプは、
各引き数ごとに少しずつ違います。
式の有効なタイプは、各引き数の説明の中に示します。
どの式も特殊タイプを生成するものであってはなりません。
ただし、特殊タイプをそのソース・タイプへキャストする関数は可能です。
- match-expression
- 特定の文字パターンに適合するかどうか調べる対象のストリングを指定する式。
この式は、以下のいずれかを使って指定できます。
- 定数
- 特殊レジスター
- ホスト変数 (ロケーター変数またはファイル参照変数を含む)
- スカラー関数
- ラージ・オブジェクトのロケーター
- 列名
- 上記のいずれかを連結する式
- pattern-expression
- 一致すべき基準となるストリングを指定する式。
この式は、以下のいずれかを使って指定できます。
- 定数
- 特殊レジスター
- ホスト変数
- 上記のいずれかをオペランドとするスカラー関数
- 上記のいずれかを連結する式
以下の制約があります。
- 式の要素に、LONG VARCHAR、CLOB、LONG VARGRAPHIC、
または DBCLOB のタイプを使うことはできません。
また、BLOB ファイル参照変数は使えません。
- pattern-expression の実際の長さは、
32 672 バイト以下でなければなりません。
LIKE パターンについて簡単に説明するとすれば、
これは match-expression の値のための適合基準を指定するために使用されるパターンです。
これには以下の規則があります。
- 下線文字 (_) は、任意の 1 文字を表します。
- パーセント記号 (%) は、ゼロ個以上の文字から構成されるストリングを表します。
- その他の文字は、その文字自身を表します。
pattern-expression に下線またはパーセント文字を含める必要がある場合は、
escape-expression によって、
パターンの中で下線またはパーセント文字に先行させる文字を指定します。
LIKE パターンについて厳密に説明するとすれば、
以下のようにします。
この説明では、escape-expression の使用は無視されています。
それについては後で説明します。
- m が match-expression の値を、
p が pattern-expression の値を表すとします。
ストリング p は、
最小の数のサブストリング指定子の並びとして解釈されるので、
p の各文字はただ 1 つのサブストリング指定子の一部となります。
サブストリング指定子とは、下線、パーセント記号、
または下線およびパーセント記号以外の任意の文字の空でない並びです。
m または p がヌル値の場合は、
述部の結果が不定になります。
それ以外の場合の結果は、真か偽のどちらかになります。
m と p の両方が空ストリングの場合、
または以下のようにして m をサブストリングに区分化したものが存在する場合、
結果は真になります。
- m のサブストリングがゼロ個以上の連続する文字の並びで、
m の各文字がちょうど 1 つのサブストリングの一部である。
- n 番目のサブストリング指定子が下線の場合、
m の n 番目のサブストリング指定子は任意の 1 文字である。
- n 番目のサブストリング指定子がパーセント記号の場合、
m の n 番目のサブストリング指定子は 0 個以上の文字の並びである。
- n 番目のサブストリング指定子が下線でもパーセント記号でもない場合、
m の n 番目のサブストリングは、
対応するサブストリング指定子と等しく、同じ長さである。
- 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 文字と MBCS 文字の両方を含めることができます。
パターンの中の特殊文字は、以下のようにして解釈されます。
- SBCS の下線は、1 つの SBCS 文字を指します。
- DBCS の下線は、1 個の MBCS 文字を指します。
- パーセント (SBCS または DBCS) は、
SBCS または MBCS のゼロ個以上の文字からなるストリングを指します。
- escape-expression
- これはオプションの引き数であり、
pattern-expression の中の下線 (_) 文字とパーセント (%) 文字の特別な意味を変更するための文字を指定する式です。
これにより、
実際にパーセントや下線文字を含む値との一致を調べるために LIKE 述部を使うことができます。
この式は、以下のいずれかを使って指定できます。
- 定数
- 特殊レジスター
- ホスト変数
- 上記のいずれかをオペランドとするスカラー関数
- 上記のいずれかを連結する式
以下の制約があります。
- 式の要素に、LONG VARCHAR、CLOB、LONG VARGRAPHIC、
または DBCLOB のタイプを使うことはできません。
また、BLOB ファイル参照変数は使えません。
- 式の結果は、SBCS または DBCS の 1 文字、
または 1 バイトだけを含む 2 進ストリングでなければなりません (SQLSTATE 22019)。
パターン・ストリングにエスケープ文字が含まれている場合、
下線、パーセント記号、またはエスケープ文字は、
それ自体のリテラル・オカレンスを表すことができます。
これは、その文字が奇数個の連続したエスケープ文字に先行されている場合です。
そうでない場合は当てはまりません。
パターンの中で、連続するエスケープ文字の並びは以下のように扱われます。
- 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 で定義されている場合は除きます (その場合は変換されません)。
- 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 バイトのエスケープ文字を獲得するには、
次のように BLOB スカラー関数を使用します。
SELECT COLBLOB FROM TABLET
WHERE COLBLOB LIKE :pattern_var ESCAPE BLOB(X'OE')
[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]