LIKE (Transact-SQL)LIKE (Transact-SQL)

適用対象: ○SQL Server ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

指定された文字列が指定されたパターンと一致するかどうかを判断します。Determines whether a specific character string matches a specified pattern. パターンは、標準の文字とワイルドカード文字を含むことができます。A pattern can include regular characters and wildcard characters. パターン検索時に、標準の文字は文字列に指定された文字と正確に一致する必要があります。During pattern matching, regular characters must exactly match the characters specified in the character string. しかし、ワイルドカード文字は文字列の任意の部分と一致することができます。However, wildcard characters can be matched with arbitrary fragments of the character string. = や != などの文字列比較演算子を使用する場合と比べて、ワイルドカード文字を使用する方がより柔軟に LIKE 演算子を使用できます。Using wildcard characters makes the LIKE operator more flexible than using the = and != string comparison operators. 引数が文字列データ型でない場合、SQL Server データベース エンジンSQL Server Database Engine は可能であれば引数を文字列データ型に変換します。If any one of the arguments isn't of character string data type, the SQL Server データベース エンジンSQL Server Database Engine converts it to character string data type, if it's possible.

記事のリンク アイコン Transact-SQL 構文表記規則Article link icon Transact-SQL Syntax Conventions

構文Syntax

-- Syntax for SQL Server and Azure SQL Database  
  
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
match_expression [ NOT ] LIKE pattern  

引数Arguments

match_expressionmatch_expression
文字型の任意の有効なです。Is any valid expression of character data type.

patternpattern
match_expression で検索する特定の文字列であり、次の有効なワイルドカード文字を含めることができます。Is the specific string of characters to search for in match_expression, and can include the following valid wildcard characters. pattern は、最大 8,000 バイトにすることができます。pattern can be a maximum of 8,000 bytes.

ワイルドカード文字Wildcard character [説明]Description Example
% 0 個以上の文字で構成される任意の文字列です。Any string of zero or more characters. WHERE title LIKE '%computer%' と指定すると、書籍名に "computer" という単語が含まれるすべての書籍が検索されます。WHERE title LIKE '%computer%' finds all book titles with the word 'computer' anywhere in the book title.
_ (アンダースコア)_ (underscore) 任意の 1 文字です。Any single character. WHERE au_fname LIKE '_ean' と指定すると、ean で終わる 4 文字のすべての名 (Dean、Sean など) が検索されます。WHERE au_fname LIKE '_ean' finds all four-letter first names that end with ean (Dean, Sean, and so on).
[ ][ ] 指定した範囲 ([a-f]) またはセット ([abcdef]) 内にある任意の 1 文字です。Any single character within the specified range ([a-f]) or set ([abcdef]). WHERE au_lname LIKE '[C-P]arsen' と指定すると、Carsen、Larsen、Karsen などのように、姓が C から P の間にある任意の 1 文字で始まり、arsen で終わる著者が検索されます。WHERE au_lname LIKE '[C-P]arsen' finds author last names ending with arsen and starting with any single character between C and P, for example Carsen, Larsen, Karsen, and so on. 範囲で検索する場合、照合順序の並べ替え規則に応じて範囲に含まれる文字が変わります。In range searches, the characters included in the range may vary depending on the sorting rules of the collation.
[^][^] 指定した範囲 ([^a-f]) またはセット ([^abcdef]) 内にない任意の 1 文字です。Any single character not within the specified range ([^a-f]) or set ([^abcdef]). WHERE au_lname LIKE 'de[^l]%' と指定すると、姓が de で始まり、次の文字が l ではないすべての著者が検索されます。WHERE au_lname LIKE 'de[^l]%' all author last names starting with de and where the following letter isn't l.

escape_characterescape_character
特定のワイルドカードがワイルドカードとしてではなく標準の文字として解釈されるように、そのワイルドカードの前に配置する文字です。Is a character put in front of a wildcard character to indicate that the wildcard is interpreted as a regular character and not as a wildcard. escape_character は、既定値を持たない文字式であり、1 文字に評価される必要があります。escape_character is a character expression that has no default and must evaluate to only one character.

戻り値の型Result Types

BooleanBoolean

結果の値Result Value

match_expression が、指定された pattern と一致する場合、LIKE は TRUE を返します。LIKE returns TRUE if the match_expression matches the specified pattern.

RemarksRemarks

LIKE を使用して文字列の比較を行うときは、パターン文字列中のすべての文字が比較の対象になります。When you do string comparisons by using LIKE, all characters in the pattern string are significant. 重要な文字として先頭または末尾のスペースがあります。Significant characters include any leading or trailing spaces. クエリ内の比較で LIKE 'abc ' 文字列 (abc に空白が 1 つ続く) を含むすべての行が返される場合、列の値が"abc" (abc の後ろに空白がない) の行は返されません。If a comparison in a query is to return all rows with a string LIKE 'abc ' (abc followed by a single space), a row in which the value of that column is abc (abc without a space) isn't returned. ただし、パターンが一致する式の中の後続する空白は無視されます。However, trailing blanks, in the expression to which the pattern is matched, are ignored. クエリ内の比較で LIKE 'abc' 文字列 (abc の後ろに空白がない) を含むすべての行が返される場合、"abc" で始まり、ゼロ個以上の空白が後続するすべての行が返されます。If a comparison in a query is to return all rows with the string LIKE 'abc' (abc without a space), all rows that start with abc and have zero or more trailing blanks are returned.

char および varchar データのパターンを使用した文字列比較では、データ型ごとにデータの格納方法に制約があるため、LIKE 比較を渡すことができません。A string comparison using a pattern that contains char and varchar data may not pass a LIKE comparison because of how the data is stored for each data type. 次の例では、ローカル変数 char をストアド プロシージャに渡し、パターン検索を使用して、姓が指定された文字列で始まるすべての従業員を検索します。The following example passes a local char variable to a stored procedure and then uses pattern matching to find all employees whose last names start with the specified set of characters.

-- Uses AdventureWorks  
  
CREATE PROCEDURE FindEmployee @EmpLName char(20)  
AS  
SELECT @EmpLName = RTRIM(@EmpLName) + '%';  
SELECT p.FirstName, p.LastName, a.City  
FROM Person.Person p JOIN Person.Address a ON p.BusinessEntityID = a.AddressID  
WHERE p.LastName LIKE @EmpLName;  
GO  
EXEC FindEmployee @EmpLName = 'Barb';  
GO  

FindEmployee プロシージャでは、20 文字未満の名前の場合、必ず char 変数 (@EmpLName) に後続する空白が含まれるため、行は返されません。In the FindEmployee procedure, no rows are returned because the char variable (@EmpLName) contains trailing blanks whenever the name contains fewer than 20 characters. LastName 列は varchar であるため、後続する空白は含まれていません。Because the LastName column is varchar, there are no trailing blanks. 後続する空白が意味を持つため、このプロシージャは失敗します。This procedure fails because the trailing blanks are significant.

次の例では、後続する空白は varchar 変数に追加されないので、検索は成功します。However, the following example succeeds because trailing blanks aren't added to a varchar variable.

-- Uses AdventureWorks  
  
CREATE PROCEDURE FindEmployee @EmpLName varchar(20)  
AS  
SELECT @EmpLName = RTRIM(@EmpLName) + '%';  
SELECT p.FirstName, p.LastName, a.City  
FROM Person.Person p JOIN Person.Address a ON p.BusinessEntityID = a.AddressID  
WHERE p.LastName LIKE @EmpLName;  
GO  
EXEC FindEmployee @EmpLName = 'Barb';  

以下に結果セットを示します。Here is the result set.

FirstName      LastName            City
----------     -------------------- --------------- 
Angela         Barbariol            Snohomish
David          Barber               Snohomish
(2 row(s) affected)  

LIKE を使用するパターン マッチングPattern Matching by Using LIKE

LIKE では、ASCII のパターン マッチングと Unicode のパターン マッチングがサポートされています。LIKE supports ASCII pattern matching and Unicode pattern matching. すべての引数 (match_expressionpattern、および escape_character) が ASCII 文字型の場合は、ASCII パターン検索が行われます。When all arguments (match_expression, pattern, and escape_character, if present) are ASCII character data types, ASCII pattern matching is performed. 引数のいずれかが Unicode データ型の場合は、すべての引数が Unicode に変換されて、Unicode パターン マッチングが実行されます。If any one of the arguments are of Unicode data type, all arguments are converted to Unicode and Unicode pattern matching is performed. LIKE で Unicode データ (nchar または nvarchar 型) を使用する場合、後続する空白は意味を持ちます。しかし、Unicode 以外のデータの場合、後続する空白は意味を持ちません。When you use Unicode data (nchar or nvarchar data types) with LIKE, trailing blanks are significant; however, for non-Unicode data, trailing blanks aren't significant. Unicode LIKE は、ISO 標準と互換性があります。Unicode LIKE is compatible with the ISO standard. ASCII LIKE は、以前のバージョンの SQL ServerSQL Server と互換性があります。ASCII LIKE is compatible with earlier versions of SQL ServerSQL Server.

次の一連の例では、ASCII LIKE のパターン マッチングと Unicode LIKE のパターン マッチングで返される行の違いを示します。The following is a series of examples that show the differences in rows returned between ASCII and Unicode LIKE pattern matching.

-- ASCII pattern matching with char column  
CREATE TABLE t (col1 char(30));  
INSERT INTO t VALUES ('Robert King');  
SELECT *   
FROM t   
WHERE col1 LIKE '% King';   -- returns 1 row  
  
-- Unicode pattern matching with nchar column  
CREATE TABLE t (col1 nchar(30));  
INSERT INTO t VALUES ('Robert King');  
SELECT *   
FROM t   
WHERE col1 LIKE '% King';   -- no rows returned  
  
-- Unicode pattern matching with nchar column and RTRIM  
CREATE TABLE t (col1 nchar (30));  
INSERT INTO t VALUES ('Robert King');  
SELECT *   
FROM t   
WHERE RTRIM(col1) LIKE '% King';   -- returns 1 row  

注意

LIKE 比較は、照合順序の影響を受けます。LIKE comparisons are affected by collation. 詳細については、「COLLATE (Transact-SQL)」を参照してください。For more information, see COLLATE (Transact-SQL).

% ワイルドカード文字の使用Using the % Wildcard Character

LIKE '5%' と指定すると、データベース エンジンDatabase Engine は数字の 5 を先頭に 0 個以上の文字が続く文字列を検索します。If the LIKE '5%' symbol is specified, the データベース エンジンDatabase Engine searches for the number 5 followed by any string of zero or more characters.

たとえば、次のクエリは、AdventureWorks2012AdventureWorks2012 データベース内のすべての動的管理ビューを表示します。これらのすべての動的管理ビューは、文字 dm で始まるためです。For example, the following query shows all dynamic management views in the AdventureWorks2012AdventureWorks2012 database, because they all start with the letters dm.

-- Uses AdventureWorks  
  
SELECT Name  
FROM sys.system_views  
WHERE Name LIKE 'dm%';  
GO  

動的管理ビューではないすべてのオブジェクトを表示するには、NOT LIKE 'dm%' を使用します。To see all objects that aren't dynamic management views, use NOT LIKE 'dm%'. 仮に、オブジェクトの総数が 32、LIKE パターンに一致する名前が 13 件発見されるとすると、NOT LIKE では、LIKE パターンに一致しないオブジェクトを 19 件発見します。If you have a total of 32 objects and LIKE finds 13 names that match the pattern, NOT LIKE finds the 19 objects that don't match the LIKE pattern.

LIKE '[^d][^m]%' のようなパターンと一致する名前が検索されるとは限りません。You may not always find the same names with a pattern such as LIKE '[^d][^m]%'. NOT LIKE の 19 件に対して、このパターンでは 14 件しか検索できません。d で始まる名前、または 2 文字目が m の名前は、すべて結果および動的管理ビュー名から削除されます。Instead of 19 names, you may find only 14, with all the names that start with d or have m as the second letter eliminated from the results, and the dynamic management view names. この動作は、否定ワイルドカード文字を使用した検索文字列は 1 文字ずつ順番に評価されるために生じます。This behavior is because match strings with negative wildcard characters are evaluated in steps, one wildcard at a time. 評価のいずれかの段階で一致しなければ、削除されます。If the match fails at any point in the evaluation, it's eliminated.

リテラルとしてのワイルドカード文字の使用Using Wildcard Characters As Literals

ワイルドカード パターン検索文字をリテラル文字として使用できます。You can use the wildcard pattern matching characters as literal characters. ワイルドカード文字をリテラル文字として使用するには、ワイルドカード文字をかっこで囲みます。To use a wildcard character as a literal character, enclose the wildcard character in brackets. 次の表は、LIKE キーワードと [ ] ワイルドカード文字の使用例を示しています。The following table shows several examples of using the LIKE keyword and the [ ] wildcard characters.

SymbolSymbol 意味Meaning
LIKE '5[%]'LIKE '5[%]' 5%5%
LIKE '[]n'LIKE '[]n' _n_n
LIKE '[a-cdf]'LIKE '[a-cdf]' a、b、c、d、または fa, b, c, d, or f
LIKE '[-acdf]'LIKE '[-acdf]' -, a, c, d, or f-, a, c, d, or f
LIKE '[ [ ]'LIKE '[ [ ]' [[
LIKE ']'LIKE ']' ]]
LIKE 'abc[]d%'LIKE 'abc[]d%' abc_d および abc_deabc_d and abc_de
LIKE 'abc[def]'LIKE 'abc[def]' abcd、abce、abcfabcd, abce, and abcf

ESCAPE 句を使用するパターン検索Pattern Matching with the ESCAPE Clause

1 文字以上の特殊なワイルドカード文字を含む文字列を検索できます。You can search for character strings that include one or more of the special wildcard characters. たとえば、customers データベース内の discounts テーブルには、パーセント記号 (%) を含む割引の値が格納されています。For example, the discounts table in a customers database may store discount values that include a percent sign (%). ワイルドカード文字ではなく、文字としてパーセント記号を検索するには、ESCAPE キーワードとエスケープ文字を指定する必要があります。To search for the percent sign as a character instead of as a wildcard character, the ESCAPE keyword and escape character must be provided. たとえば、サンプル データベースには、"30%" というテキストを含んでいる comment という名前の列があります。For example, a sample database contains a column named comment that contains the text 30%. comment 列内の任意の場所で文字列 "30%" を含んでいる任意の行を検索するには、WHERE comment LIKE '%30!%%' ESCAPE '!' などの WHERE 句を指定します。To search for any rows that contain the string 30% anywhere in the comment column, specify a WHERE clause such as WHERE comment LIKE '%30!%%' ESCAPE '!'. ESCAPE とエスケープ文字を指定していない場合、データベース エンジンDatabase Engine は文字列 "30" を含む行を返します。If ESCAPE and the escape character aren't specified, the データベース エンジンDatabase Engine returns any rows with the string 30!.

LIKE パターンでエスケープ文字の後に文字がない場合、そのパターンは無効になり、LIKE は FALSE を返します。If there is no character after an escape character in the LIKE pattern, the pattern isn't valid and the LIKE returns FALSE. エスケープ文字の後にある文字がワイルドカード文字ではない場合、このパターンの中ではエスケープ文字は破棄され、次の文字は通常の文字として扱われます。If the character after an escape character isn't a wildcard character, the escape character is discarded and the following character is treated as a regular character in the pattern. これらの文字には、2 つの角かっこ ([ ]) に囲まれたパーセント記号 (%)、アンダースコア ()、および左角かっこ ([) の各ワイルドカード文字が含まれます。These characters include the percent sign (%), underscore (), and left bracket ([) wildcard characters when they are enclosed in double brackets ([ ]). エスケープ文字は、キャレット (^)、ハイフン (-)、または右大かっこ (]) をエスケープする場合などに、二重大かっこ ([]) で囲んで使用できます。Escape characters can be used within the double bracket characters ([ ]), including to escape a caret (^), hyphen (-), or right bracket (]).

0x0000 (char(0) ) の Windows 照合順序で未定義の文字は、LIKE に含めることができません。0x0000 (char(0)) is an undefined character in Windows collations and can't be included in LIKE.

使用例Examples

A.A. LIKE を % ワイルドカード文字と共に使用するUsing LIKE with the % wildcard character

次の例では、415 テーブルで市外局番 PersonPhone を持つすべての電話番号を検索します。The following example finds all telephone numbers that have area code 415 in the PersonPhone table.

-- Uses AdventureWorks  
  
SELECT p.FirstName, p.LastName, ph.PhoneNumber  
FROM Person.PersonPhone AS ph  
INNER JOIN Person.Person AS p  
ON ph.BusinessEntityID = p.BusinessEntityID  
WHERE ph.PhoneNumber LIKE '415%'  
ORDER by p.LastName;  
GO  

以下に結果セットを示します。Here is the result set.

FirstName             LastName             Phone
-----------------     -------------------  ------------
Ruben                 Alonso               415-555-124  
Shelby                Cook                 415-555-0121  
Karen                 Hu                   415-555-0114  
John                  Long                 415-555-0147  
David                 Long                 415-555-0123  
Gilbert               Ma                   415-555-0138  
Meredith              Moreno               415-555-0131  
Alexandra             Nelson               415-555-0174  
Taylor                Patterson            415-555-0170  
Gabrielle              Russell             415-555-0197  
Dalton                 Simmons             415-555-0115  
(11 row(s) affected)  
``` 

### B. Using NOT LIKE with the % wildcard character  
The following example finds all telephone numbers in the `PersonPhone` table that have area codes other than `415`.  
 
```sql  
-- Uses AdventureWorks  
 
SELECT p.FirstName, p.LastName, ph.PhoneNumber  
FROM Person.PersonPhone AS ph  
INNER JOIN Person.Person AS p  
ON ph.BusinessEntityID = p.BusinessEntityID  
WHERE ph.PhoneNumber NOT LIKE '415%' AND p.FirstName = 'Gail'  
ORDER BY p.LastName;  
GO  

以下に結果セットを示します。Here is the result set.

FirstName              LastName            Phone
---------------------- -------------------- -------------------
Gail                  Alexander            1 (11) 500 555-0120  
Gail                  Butler               1 (11) 500 555-0191  
Gail                  Erickson             834-555-0132  
Gail                  Erickson             849-555-0139  
Gail                  Griffin              450-555-0171  
Gail                  Moore                155-555-0169  
Gail                  Russell              334-555-0170  
Gail                  Westover             305-555-0100  
(8 row(s) affected)  
```  

### C. Using the ESCAPE clause  
The following example uses the `ESCAPE` clause and the escape character to find the exact character string `10-15%` in column `c1` of the `mytbl2` table.  
 
```sql
USE tempdb;  
GO  
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES  
     WHERE TABLE_NAME = 'mytbl2')  
  DROP TABLE mytbl2;  
GO  
USE tempdb;  
GO  
CREATE TABLE mytbl2  
(  
c1 sysname  
);  
GO  
INSERT mytbl2 VALUES ('Discount is 10-15% off'), ('Discount is .10-.15 off');  
GO  
SELECT c1   
FROM mytbl2  
WHERE c1 LIKE '%10-15!% off%' ESCAPE '!';  
GO  

D.D. [ ] ワイルドカード文字を使用するUsing the [ ] wildcard characters

次の例では、Person テーブルで、名前が Cheryl またはSheryl である従業員を検索します。The following example finds employees on the Person table with the first name of Cheryl or Sheryl.

-- Uses AdventureWorks  
  
SELECT BusinessEntityID, FirstName, LastName   
FROM Person.Person   
WHERE FirstName LIKE '[CS]heryl';  
GO  

次の例では、Person テーブルで、姓が Zheng または Zhang である従業員の行を検索します。The following example finds the rows for employees in the Person table with last names of Zheng or Zhang.

-- Uses AdventureWorks  
  
SELECT LastName, FirstName  
FROM Person.Person  
WHERE LastName LIKE 'Zh[ae]ng'  
ORDER BY LastName ASC, FirstName ASC;  
GO  

例: Azure SQL データ ウェアハウスAzure SQL Data Warehouse および Parallel Data WarehouseParallel Data WarehouseExamples: Azure SQL データ ウェアハウスAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

E.E. LIKE を % ワイルドカード文字と共に使用するUsing LIKE with the % wildcard character

次の例では、DimEmployee テーブルで 612 で始まる電話番号を持つすべての従業員を検索します。The following example finds all employees in the DimEmployee table with telephone numbers that start with 612.

-- Uses AdventureWorks  
  
SELECT FirstName, LastName, Phone  
FROM DimEmployee  
WHERE phone LIKE '612%'  
ORDER by LastName;  

F.F. NOT LIKE を % ワイルドカード文字と共に使用するUsing NOT LIKE with the % wildcard character

次の例では、DimEmployee テーブルで 612 以外で始まるすべての電話番号を検索します。The following example finds all telephone numbers in the DimEmployee table that don't start with 612. .

-- Uses AdventureWorks  
  
SELECT FirstName, LastName, Phone  
FROM DimEmployee  
WHERE phone NOT LIKE '612%'  
ORDER by LastName;  

G.G. LIKE を _ ワイルドカード文字と共に使用するUsing LIKE with the _ wildcard character

次の例では、DimEmployee テーブルで、6 で始まり 2 で終る市外局番を持つすべての電話番号を検索します。The following example finds all telephone numbers that have an area code starting with 6 and ending in 2 in the DimEmployee table. ワイルドカード文字 % は、検索パターンの末尾に含まれており、電話の列値の後続のすべての文字と一致します。The % wildcard character is included at the end of the search pattern to match all following characters in the phone column value.

-- Uses AdventureWorks  
  
SELECT FirstName, LastName, Phone  
FROM DimEmployee  
WHERE phone LIKE '6_2%'  
ORDER by LastName;   

参照See Also

PATINDEX (Transact-SQL) PATINDEX (Transact-SQL)
式 (Transact-SQL) Expressions (Transact-SQL)
組み込み関数 (Transact-SQL) Built-in Functions (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
WHERE (Transact-SQL)WHERE (Transact-SQL)