LIKE (Transact-SQL)

Berlaku untuk:yes SQL Server (semua versi yang didukung) YesAzure SQL Database YesAzure SQL Managed Instance yesAzure Synapse Analytics Analytics yesPlatform System (PDW)

Menentukan apakah string karakter tertentu cocok dengan pola tertentu. Pola dapat mencakup karakter reguler dan karakter kartubebas. Selama pencocokan pola, karakter reguler harus sama persis dengan karakter yang ditentukan dalam string karakter. Namun, karakter wildcard dapat dicocokkan dengan fragmen arbitrer dari string karakter. Menggunakan karakter kartubebas membuat operator LIKE lebih fleksibel daripada menggunakan operator perbandingan string = dan !=. Jika salah satu argumen bukan dari jenis data string karakter, mesin database SQL Server mengonversinya menjadi jenis data string karakter, jika memungkinkan.

Article link iconKonvensi Sintaksis T-SQL

Sintaks

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

Catatan

Saat ini ESCAPE dan STRING_ESCAPE tidak didukung di Azure Synapse Analytics atau Analytics Platform System (PDW).

Catatan

Untuk melihat sintaks transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

match_expression
Adalah ekspresi tipe data karakter yang valid.

pola
Adalah string karakter tertentu untuk dicari di match_expression, dan dapat menyertakan karakter kartubebas yang valid berikut ini. pola bisa maksimal 8.000 byte.

Katakter kartubebas Deskripsi Contoh
% Setiap string karakter nol atau lebih. WHERE title LIKE '%computer%' menemukan semua judul buku dengan kata 'komputer' di mana saja dalam judul buku.
_ (garis bawah) Setiap karakter tunggal. WHERE au_fname LIKE '_ean' menemukan keempat huruf pertama yang diakhir dengan ean (Dean, Sean, dan sebagainya).
[ ] Setiap karakter tunggal dalam rentang yang ditentukan ([a-f]) atau set ([abcdef]). WHERE au_lname LIKE '[C-P]arsen' menemukan nama belakang penulis yang berakhir dengan arsen dan dimulai dengan karakter tunggal antara C dan P, misalnya Carsen, Larsen, Karsen, dan sebagainya. Dalam pencarian rentang, karakter yang disertakan dalam rentang dapat bervariasi tergantung pada aturan pengurutan kolabasi.
[^] Setiap karakter tunggal yang tidak berada dalam rentang yang ditentukan ([^a-f]) atau set ([^abcdef]). WHERE au_lname LIKE 'de[^l]%' menemukan semua nama belakang penulis yang dimulai dengan de dan di mana huruf berikut bukan l.

escape_character
Adalah karakter yang diletakkan di depan karakter kartubebas untuk menunjukkan bahwa kartubebas ditafsirkan sebagai karakter biasa dan bukan sebagai kartubebas. escape_character adalah ekspresi karakter yang tidak memiliki default dan harus mengevaluasi hanya satu karakter.

Jenis Hasil

Boolean

Nilai Hasil

LIKE mengembalikan TRUE jika match_expression cocok dengan pola yang ditentukan.

Keterangan

Saat Anda melakukan perbandingan string dengan menggunakan LIKE, semua karakter dalam string pola signifikan. Karakter signifikan mencakup spasi di depan atau di belakang. Jika perbandingan dalam kueri adalah mengembalikan semua baris dengan string LIKE 'abc ' (abc diikuti oleh spasi tunggal), baris di mana nilai kolom tersebut adalah abc (abc tanpa spasi) tidak dikembalikan. Namun, di akhir kosong, dalam ekspresi di mana pola dicocokkan, diabaikan. Jika perbandingan dalam kueri adalah mengembalikan semua baris dengan string LIKE 'abc' (abc tanpa spasi), semua baris yang dimulai dengan abc dan memiliki nol atau lebih kosong berikutnya dikembalikan.

Perbandingan string menggunakan pola yang berisi data karakter dan varchar mungkin tidak melewati perbandingan LIKE karena bagaimana data disimpan untuk setiap jenis data. Contoh berikut meneruskan variabel karakter lokal ke prosedur tersimpan lalu menggunakan pencocokan pola untuk menemukan semua karyawan yang nama belakangnya dimulai dengan sekumpulan karakter yang ditentukan.

-- 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 Dalam prosedur, tidak ada baris yang dikembalikan karena variabel karakter (@EmpLName) berisi kosong berikutnya setiap kali nama berisi kurang dari 20 karakter. LastName Karena kolom adalah varchar, tidak ada kosong berikutnya. Prosedur ini gagal karena kosong berikutnya signifikan.

Namun, contoh berikut berhasil karena kosong berikutnya tidak ditambahkan ke variabel varchar .

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

Berikut adalah hasil yang ditetapkan.

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

Pencocokan Pola dengan Menggunakan LIKE

LIKE mendukung pencocokan pola ASCII dan pencocokan pola Unicode. Ketika semua argumen (match_expression, pola, dan escape_character, jika ada) adalah jenis data karakter ASCII, pencocokan pola ASCII dilakukan. Jika salah satu argumen adalah jenis data Unicode, semua argumen dikonversi ke pencocokan pola Unicode dan Unicode dilakukan. Saat Anda menggunakan data Unicode (jenis data nchar atau nvarchar ) dengan LIKE, kosong berikutnya signifikan; namun, untuk data non-Unicode, kosong berikutnya tidak signifikan. Unicode LIKE kompatibel dengan standar ISO. ASCII LIKE kompatibel dengan versi SQL Server yang lebih lama.

Berikut ini adalah serangkaian contoh yang menunjukkan perbedaan baris yang dikembalikan antara pencocokan pola ASCII dan Unicode LIKE.

-- 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  

Catatan

Perbandingan LIKE dipengaruhi oleh kolase. Untuk informasi selengkapnya, lihat COLLATE (Transact-SQL).

Menggunakan Karakter KartuBebas %

Jika simbol LIKE '5%' ditentukan, Mesin Database mencari angka 5 diikuti dengan string nol karakter atau lebih.

Misalnya, kueri berikut menunjukkan semua tampilan manajemen dinamis dalam database AdventureWorks2012 , karena semuanya dimulai dengan huruf dm.

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

Untuk melihat semua objek yang bukan tampilan manajemen dinamis, gunakan NOT LIKE 'dm%'. Jika Anda memiliki total 32 objek dan LIKE menemukan 13 nama yang cocok dengan pola, NOT LIKE menemukan 19 objek yang tidak cocok dengan pola LIKE.

Anda mungkin tidak selalu menemukan nama yang sama dengan pola seperti LIKE '[^d][^m]%'. Alih-alih 19 nama, Anda mungkin hanya menemukan 14, dengan semua nama yang dimulai dengan d atau memiliki m sebagai huruf kedua yang dihilangkan dari hasil, dan nama tampilan manajemen dinamis. Perilaku ini karena string kecocokan dengan karakter kartubebas negatif dievaluasi dalam langkah-langkah, satu kartubebas pada satu waktu. Jika kecocokan gagal kapan saja dalam evaluasi, itu akan dihilangkan.

Menggunakan Karakter Wildcard Sebagai Literal

Anda dapat menggunakan karakter pencocokan pola kartubebas sebagai karakter harfiah. Untuk menggunakan karakter kartubebas sebagai karakter harfiah, sertakan karakter kartubebas dalam tanda kurung siku. Tabel berikut ini memperlihatkan beberapa contoh penggunaan kata kunci LIKE dan karakter kartubebas [ ] .

Simbol Makna
LIKE '5[%]' 5%
LIKE '[_]n' _n
LIKE '[a-cdf]' a, b, c, d, atau f
LIKE '[-acdf]' -, a, c, d, atau f
SEPERTI '[ [ ]' [
SEPERTI ']' ]
LIKE 'abc[_]d%' abc_d dan abc_de
LIKE 'abc[def]' abcd, abce, dan abcf

Pencocokan Pola dengan Klausul ESCAPE

Anda dapat mencari string karakter yang menyertakan satu atau beberapa karakter wildcard khusus. Misalnya, tabel diskon dalam database pelanggan dapat menyimpan nilai diskon yang menyertakan tanda persen (%). Untuk mencari tanda persen sebagai karakter alih-alih sebagai karakter kartubebas, kata kunci ESCAPE dan karakter escape harus disediakan. Misalnya, database sampel berisi kolom bernama komentar yang berisi teks 30%. Untuk mencari baris apa pun yang berisi string 30% di mana saja di kolom komentar, tentukan klausa WHERE seperti WHERE comment LIKE '%30!%%' ESCAPE '!'. Jika ESCAPE dan karakter escape tidak ditentukan, Mesin Database mengembalikan baris apa pun dengan string 30!.

Jika tidak ada karakter setelah karakter escape dalam pola LIKE, polanya tidak valid dan LIKE mengembalikan FALSE. Jika karakter setelah karakter escape bukan karakter kartubebas, karakter escape akan dibuang dan karakter berikut diperlakukan sebagai karakter biasa dalam pola. Karakter ini mencakup tanda persen (%), garis bawah (_), dan karakter kartubebas tanda kurung kiri ([) ketika diapit dalam tanda kurung ganda ([ ]). Karakter escape dapat digunakan dalam karakter tanda kurung ganda ([ ]), termasuk untuk meloloskan tanda sisipan (^), tanda hubung (-), atau kurung siku kanan (]).

0x0000 (char(0)) adalah karakter yang tidak terdefinisi dalam kolase Windows dan tidak dapat disertakan dalam LIKE.

Contoh

A. Menggunakan LIKE dengan karakter kartubebas %

Contoh berikut menemukan semua nomor telepon yang memiliki kode 415 area dalam PersonPhone tabel.

-- 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  

Berikut adalah tataan hasil.

 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. Menggunakan NOT LIKE dengan karakter kartubebas %

Contoh berikut menemukan semua nomor telepon dalam PersonPhone tabel yang memiliki kode area selain 415.

-- 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  

Berikut adalah hasil yang ditetapkan.

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. Menggunakan klausa ESCAPE

Contoh berikut menggunakan klausul ESCAPE dan karakter escape untuk menemukan string 10-15% karakter yang tepat di kolom c1mytbl2 tabel.

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. Menggunakan karakter kartubebas [ ]

Contoh berikut menemukan karyawan pada Person tabel dengan nama Cheryl depan atau Sheryl.

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

Contoh berikut menemukan baris untuk karyawan dalam Person tabel dengan nama Zheng belakang atau Zhang.

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

Contoh: Azure Synapse Analytics and Analytics Platform System (PDW)

E. Menggunakan LIKE dengan karakter kartubebas %

Contoh berikut menemukan semua karyawan dalam DimEmployee tabel dengan nomor telepon yang dimulai dengan 612.

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

F. Menggunakan NOT LIKE dengan karakter kartubebas %

Contoh berikut menemukan semua nomor telepon dalam DimEmployee tabel yang tidak dimulai dengan 612. .

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

G. Menggunakan LIKE dengan karakter kartubebas _

Contoh berikut menemukan semua nomor telepon yang memiliki kode area yang dimulai dengan 6 dan berakhiran DimEmployee dalam 2 tabel. Karakter kartubebas % disertakan di akhir pola pencarian untuk mencocokkan semua karakter berikut dalam nilai kolom telepon.

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

Lihat juga

PATINDEX (SQL bertransaksi)
Ekspresi (SQL Bertransaksi)
Fungsi Bawaan (SQL Transact)
SELECT (Transact-SQL)
WHERE (SQL Bertransaksi)