LIKE条件
ソースに特定のパターンが含まれている場合に、LIKE条件はTRUEと評価されます。LIKE条件は、指定されたパターンをソースで検索して、文字値の部分間の突合せを行います。
SQL構文
Source [NOT] LIKE Pattern [ESCAPE {'EscapeChar' | {? | :DynamicParameter} }]
Patternの構文は、次のとおりです。
Expression [ || Expression ] [ ... ]
パラメータ
| パラメータ | 説明 |
|---|---|
|
|
このソースに出現する指定されたパターンがすべて検出されます。ソースには、式、列、関数の結果の文字列またはこれらの任意の組合せを指定することができ、これがパターンの突合せが行われるソースに使用される文字列になります。ソースには、 |
|
|
1つ以上の式により、ソース内で検索する文字パターンを示します。パターンのデータ型は、 複数の式を連結して、パターンに使用する文字列を生成できます。 パターンは文字(数字と特殊文字を含む)で構成されます。たとえば、 次の1つ以上の記号を使用して、部分一致をテストする条件を使用することもできます。
|
|
|
パターン内に含まれる式には、列、動的パラメータまたは文字列に評価される関数の結果を使用できます。式の詳細は、「式の指定」を参照してください。 |
|
|
パターン内の エスケープ文字は単一の文字である必要があります。エスケープ文字をパターンに使用する場合は、その後に続けてエスケープ文字自体、 |
|
?
|
準備されたSQL文の動的パラメータです。パラメータの値は、文の実行時に設定されます。 |
説明
-
エスケープ文字が指定されている場合を除き、パターン内の
_または%記号はワイルド・カード文字として機能します。エスケープ文字を指定した場合、それに後続するワイルド・カードまたはエスケープ文字はリテラルとして扱われます。エスケープ文字に後続する文字がワイルド・カードまたはエスケープ文字ではない場合、エラーになります。 -
式、列、文字列、動的パラメータまたは関数の結果を組み合せてパターンを指定する場合、||演算子を使用してアイテムを連結し、最終的なパターンを指定できます。
-
LIKE条件を使用する文字式を比較するすべての条件において、大/小文字は区別されます。 -
式の値、パターン、エスケープ文字が
NULLの場合、LIKE条件はNULLと評価されます。 -
LIKE条件がマルチバイト文字セットで使用される場合、処理に時間がかかることがあります。 -
NCHAR、NVARCHARまたはNCLOBに含まれる各国語キャラクタ文字列内での検索の詳細は、「NCHAR、NVARCHAR2およびNCLOBデータ型の文字列のパターン一致」を参照してください。
例
姓が'Sm'で始まる従業員を検索します。
Command> SELECT employee_id, last_name,first_name FROM employees
WHERE last_name LIKE 'Sm%'
ORDER BY employee_id,last_name,first_name;
< 159, Smith, Lindsey >
< 171, Smith, William >
2 rows found.
姓が'SM'で始まる従業員を検索します。last_nameが大文字の'SM'で始まる従業員がいないため、この問合せでは結果は返されません。
Command> SELECT employee_id, last_name,first_name from employees
WHERE last_name LIKE 'SM%'
ORDER BY employee_id,last_name,first_name;
0 rows found.
ただし、姓列のソース値を大文字に変換することによって、'SM'で始まるすべての名前を検出できます。
Command> SELECT employee_id, last_name, first_name FROM employees
WHERE UPPER(last_name) LIKE ('SM%');
< 159, Smith, Lindsey >
< 171, Smith, William >
2 rows found.
?で示される動的パラメータを使用して、姓が'Sm'で始まる従業員を実行時に検索します。
Command> SELECT employee_id, last_name,first_name FROM employees
WHERE last_name like ?
ORDER BY employee_id,last_name,first_name;
Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.
Enter Parameter 1 '_QMARK_1' (VARCHAR2) > 'Sm%'
< 159, Smith, Lindsey >
< 171, Smith, William >
2 rows found.
:aで示されるバインド変数を使用して、姓が'Sm'で始まる従業員を実行時に検索します。
Command> SELECT employee_id, last_name,first_name FROM employees
WHERE last_name LIKE :a
ORDER BY employee_id,last_name,first_name;
Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.
Enter Parameter 1 'A' (VARCHAR2) > 'Sm%'
< 159, Smith, Lindsey >
< 171, Smith, William >
2 rows found.
姓が'Smit'で始まる従業員について、そのマネージャの姓を検索します。従業員の名前と姓、およびマネージャの姓を表示します。
Command> SELECT e1.first_name || ' ' || e1.last_name||' works for '||e2.last_name
FROM employees e1, employees e2
WHERE e1.manager_id = e2.employee_id
AND e1.last_name like 'Smit';
< Lindsey Smith works for Partners >
< William Smith works for Cambrault >
2 rows found.
この問合せパターンでは、検索対象のパターンとして、last_name列を参照します。
Command> SELECT e1.first_name || ' ' || e1.last_name||' works for ' ||
e2.last_name
FROM employees e1, employees e2
WHERE e1.manager_id = e2.employee_id AND 'Smith' like e1.last_name;
< Lindsey Smith works for Partners >
< William Smith works for Cambrault >
2 rows found.
パターンには、列または関数の結果を指定できます。次の例では、UPPER関数を、ソースのlast_name列と検索対象の'ma'検索文字列の両方で使用します。
Command> SELECT last_name, first_name FROM employees
WHERE UPPER(last_name) LIKE UPPER('ma%');
< Markle, Steven >
< Marlow, James >
< Mallin, Jason >
< Matos, Randall >
< Marvins, Mattea >
< Mavris, Susan >
6 rows found.
次の問合せは、動的パラメータを使用したパターンのリクエストを示します。
Command> SELECT first_name || ' ' || last_name
FROM employees WHERE last_name like ?;
Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.
Enter Parameter 1 '_QMARK_1' (VARCHAR2) > 'W%'
< Matthew Weiss >
< Alana Walsh >
< Jennifer Whalen >
3 rows found.
次の問合せでは、パターンで文字列と動的パラメータを組み合せています。
Command> SELECT first_name || ' ' || last_name
FROM employees WHERE last_name like 'W' || ?;
Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.
Enter Parameter 1 '_QMARK_1' (VARCHAR2) > '%'
< Matthew Weiss >
< Alana Walsh >
< Jennifer Whalen >
3 rows found.NCHAR、NVARCHAR2およびNCLOBデータ型の文字列のパターン一致
LIKE条件は、NCHAR、NVARCHAR2およびNCLOB型の文字列のパターン一致に使用できます。パターン一致文字は、次のとおりです。
| 文字 | 説明 |
|---|---|
|
|
単一のUnicode文字を表します。 |
|
|
0(ゼロ)文字以上のUnicode文字列を表します。 |
説明
-
エスケープ文字は、単一のUnicode文字またはパラメータと同様にサポートされます。
-
LIKEオペランドの型は、すべてのキャラクタ・タイプの組合せになります。 -
LIKE条件では、大/小文字およびアクセントを区別しないNLS_SORTがサポートされています。
例
これらの例では、Unicode文字U+0021 EXCLAMATION MARKは、Unicode文字U+005F SPACING UNDERSCOREのエスケープとして使用されています。Unicode文字U+0025 PERCENT SIGNはエスケープされず、パターン一致としてみなされます。
VendorNameは、NCHARまたはNVARCHAR2の列です。
SELECT VendorName FROM Purchasing.Vendors WHERE VendorName LIKE N'ACME!_%' ESCAPE N'!';
この例は次の例と同等です。
SELECT VendorName FROM Purchasing.Vendors WHERE VendorName LIKE N'ACME!\u005F\u0025' ESCAPE N'!';