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 値の場合は、述部の結果は不明です。 それ以外の場合、結果は真または偽のいずれかになります。 x と y の両方が空ストリングの場合、 あるいは以下のようなサブストリングに x を区分化できる場合、結果は真になります。
- x のサブストリングがゼロ個または 1 個以上の連続する一連の文字である場合に、 x の各文字が厳密に 1 つのサブストリングの一部である。
- n 番目のサブストリング指定子が下線の場合、 x の n 番目のサブストリング指定子は任意の 1 文字である。
- n 番目のサブストリング指定子がパーセント記号の場合、 x の n 番目のサブストリング指定子は 0 個以上の文字の並びである。
- n 番目のサブストリング指定子が下線でもパーセント記号でもない場合に、 x の n 番目のサブストリングが、対応するサブストリング指定子と等しく、 かつ対応するサブストリング指定子と同じ長さである。
- 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 列目の述部を評価 した場合の結果を示しています。
例 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||'%'