Ada diskusi (hampir religius), jika Anda harus menggunakan LIKE atau '=' untuk membandingkan string dalam pernyataan SQL.
- Apakah ada alasan untuk menggunakan LIKE?
- Apakah ada alasan untuk menggunakan '='?
- Performa? Keterbacaan?
sql
comparison
guerda
sumber
sumber
LIKE
dan operator kesetaraan memiliki tujuan yang berbeda, mereka tidak melakukan hal yang sama:=
jauh lebih cepat, sedangkanLIKE
dapat mengartikan wildcard. Gunakan di=
mana pun Anda bisa dan diLIKE
mana pun Anda harus.Pertandingan sampel:
sumber
Dalam pengalaman kecil saya:
"=" untuk Pencocokan Tepat.
"LIKE" untuk Pertandingan Parsial.
sumber
Ada beberapa trik lain yang ditawarkan Postgres untuk pencocokan string (jika itu adalah DB Anda):
ILIKE, yang merupakan kasus SEPERTI pertandingan yang tidak sensitif:
Cocok:
Dan jika Anda ingin benar-benar marah, Anda dapat menggunakan ekspresi reguler:
Cocok:
sumber
Sama seperti kepala, operator '=' akan menambahkan string dengan spasi di Transact-SQL. Jadi
'abc' = 'abc '
akan kembali benar;'abc' LIKE 'abc '
akan kembali salah. Dalam kebanyakan kasus '=' akan benar, tetapi dalam kasus saya baru-baru ini tidak.Jadi sementara '=' lebih cepat, LIKE mungkin secara lebih eksplisit menyatakan niat Anda.
http://support.microsoft.com/kb/316626
sumber
Untuk pencocokan pola, gunakan LIKE. Untuk pencocokan tepat =.
sumber
LIKE
digunakan untuk pencocokan pola dan=
digunakan untuk uji kesetaraan (seperti yang didefinisikan oleh yangCOLLATION
digunakan).=
dapat menggunakan indeks sementaraLIKE
kueri biasanya memerlukan pengujian setiap rekaman tunggal dalam hasil yang ditetapkan untuk memfilternya (kecuali jika Anda menggunakan pencarian teks lengkap) sehingga=
memiliki kinerja yang lebih baik.sumber
SUKA tidak cocok dengan karakter wildcard [*,?] Di shell
LIKE '% suffix' - beri saya semua yang berakhiran akhiran. Anda tidak bisa melakukannya dengan =
Tergantung pada case sebenarnya.
sumber
Ada alasan lain untuk menggunakan "suka" walaupun kinerjanya lebih lambat: Nilai karakter secara implisit dikonversi menjadi bilangan bulat jika dibandingkan, jadi:
declare @transid varchar (15)
if @transid! = 0
akan memberi Anda kesalahan "Konversi nilai varchar '123456789012345' meluap kolom int".
sumber