LIKE条件

ソースに特定のパターンが含まれている場合に、LIKE条件はTRUEと評価されます。LIKE条件は、指定されたパターンをソースで検索して、文字値の部分間の突合せを行います。

SQL構文

Source [NOT] LIKE Pattern 
 [ESCAPE {'EscapeChar' | {? | :DynamicParameter} }]

Patternの構文は、次のとおりです。

Expression [ || Expression ] [ ... ]

パラメータ

パラメータ 説明

Source

このソースに出現する指定されたパターンがすべて検出されます。ソースには、式、列、関数の結果の文字列またはこれらの任意の組合せを指定することができ、これがパターンの突合せが行われるソースに使用される文字列になります。ソースには、CHARVARCHAR2NCHARNVARCHAR2CLOBまたはNCLOBを使用できます。式の詳細は、「式」を参照してください。NCHARNVARCHARまたはNCLOBに含まれる各国語キャラクタ文字列内での検索の詳細は、「NCHAR、NVARCHAR2およびNCLOBデータ型の文字列のパターン一致」を参照してください。

Pattern

1つ以上の式により、ソース内で検索する文字パターンを示します。パターンのデータ型は、CHARVARCHAR2NCHARNVARCHAR2CLOBNCLOBなどの文字列データ型である必要があります。

複数の式を連結して、パターンに使用する文字列を生成できます。

パターンは文字(数字と特殊文字を含む)で構成されます。たとえば、NAME LIKE 'Annie'は、空白を含まないAnnieという名前にかぎりTRUEと評価されます。

次の1つ以上の記号を使用して、部分一致をテストする条件を使用することもできます。

  • _記号は、単一の文字を表します。次に例を示します:

    BOBTOMは、どちらも条件NAME LIKE '_O_'を満たします。

  • %記号は、0(ゼロ)文字以上の文字列を表します。次に例を示します:

    MARIERENATEは、ともに条件NAME LIKE '%A%'を満たします。

_%記号は、パターンの中で自由に組み合せて繰り返し使用できます。ただし、パターン内のリテラルとして記号を使用するには、ESCAPE句を使用し、それらの記号の前にEscapeCharパラメータで定義したエスケープ文字を指定する必要があります。

Expression

パターン内に含まれる式には、列、動的パラメータまたは文字列に評価される関数の結果を使用できます。式の詳細は、「式の指定」を参照してください。

EscapeChar

パターン内の_%記号をリテラルとして解釈させる場合に使用できる、オプションのエスケープ文字を定義します。

エスケープ文字は単一の文字である必要があります。エスケープ文字をパターンに使用する場合は、その後に続けてエスケープ文字自体、_記号または%記号と指定する必要があります。そのようなペアによって、パターンの2番目文字の単一リテラルの出現が表現されます。エスケープ文字では、大文字と小文字は常に区別されます。_または%をエスケープ文字として使用することはできません。

?

DynamicParameter

準備されたSQL文の動的パラメータです。パラメータの値は、文の実行時に設定されます。

説明

  • エスケープ文字が指定されている場合を除き、パターン内の_または%記号はワイルド・カード文字として機能します。エスケープ文字を指定した場合、それに後続するワイルド・カードまたはエスケープ文字はリテラルとして扱われます。エスケープ文字に後続する文字がワイルド・カードまたはエスケープ文字ではない場合、エラーになります。

  • 式、列、文字列、動的パラメータまたは関数の結果を組み合せてパターンを指定する場合、||演算子を使用してアイテムを連結し、最終的なパターンを指定できます。

  • LIKE条件を使用する文字式を比較するすべての条件において、大/小文字は区別されます。

  • 式の値、パターン、エスケープ文字がNULLの場合、LIKE条件はNULLと評価されます。

  • LIKE条件がマルチバイト文字セットで使用される場合、処理に時間がかかることがあります。

  • NCHARNVARCHARまたは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条件は、NCHARNVARCHAR2およびNCLOB型の文字列のパターン一致に使用できます。パターン一致文字は、次のとおりです。

文字 説明

U+005F SPACING UNDERSCORE

単一のUnicode文字を表します。

U+0025 PERCENT SIGN

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'!';