Ana içeriğe geç
Kesit SQL
Temel · Temeller

LIKE ile alt çizgi ve yüzde işaretini aramak: ESCAPE

_ ve % joker karakterdir; metnin içinde gerçekten geçen _ veya % işaretini aramak için kaçış karakteri kullanılır.

Uygulamada aç, 6 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Joker karakterler hatırlatma

DesenAnlamıEşleşir
'e%'e ile başlayan her şeyegitim, elektronik, e_ticaret
'e_%'e, ardından herhangi bir karakter, sonra her şeyyine egitim, elektronik, e_ticaret
'%_%'en az bir karakterboş olmayan her değer

Yani _ yazınca motor “alt çizgi karakteri” değil “tek bir karakter” anlar. bank_txns.merchant_category sütununda gerçekten alt çizgi içeren tek değer e_ticaret'tir; ama LIKE 'e_%' üç kategoriyi birden getirir.

SELECT DISTINCT merchant_category
FROM bank_txns
WHERE merchant_category LIKE 'e_%'
ORDER BY merchant_category;

ESCAPE: “bu karakteri harfiyen al”

Desende joker karakterin önüne bir kaçış karakteri koyup bu karakteri ESCAPE ile bildirirsin. Kaçış karakteri olarak metinde geçmeyen bir işaret seç; ! yaygın bir seçimdir.

SELECT DISTINCT merchant_category
FROM bank_txns
WHERE merchant_category LIKE 'e!_%' ESCAPE '!'
ORDER BY merchant_category;

Artık yalnızca e_ticaret gelir. Aynı yöntem yüzde işareti için de geçerlidir: LIKE '%!%%' ESCAPE '!' içinde “%” geçen değerleri bulur (örneğin “%20 indirim”).

SQL türüNot
Tüm SQL türleriLIKE '...' ESCAPE '!' standarttır ve her yerde çalışır.
SQL ServerAyrıca köşeli parantezle de kaçırılabilir: LIKE 'e[_]%'. Köşeli parantez SQL Server'a özgüdür.
MySQL, PostgreSQLESCAPE yazmazsan varsayılan kaçış karakteri ters bölüdür: LIKE 'e\_%'. Taşınabilirlik için ESCAPE'i açıkça yazmak daha güvenlidir.
Oracle, BigQueryVarsayılan kaçış karakteri yoktur; ESCAPE yazmak gerekir (BigQuery'de ters bölü desteklenir).
Kullanıcı girdisiUygulamada kullanıcının yazdığı arama metnini LIKE desenine koyarken içindeki _ ve % karakterlerini kaçırmazsan “a_b” araması “axb”yi de bulur. Parametreli sorgu SQL injection'ı önler ama joker karakterleri kaçırmaz; bunu ayrıca yapman gerekir.
Alıştırmalara geç (6)