Joker karakterler hatırlatma
| Desen | Anlamı | Eşleşir |
|---|---|---|
'e%' | e ile başlayan her şey | egitim, elektronik, e_ticaret |
'e_%' | e, ardından herhangi bir karakter, sonra her şey | yine egitim, elektronik, e_ticaret |
'%_%' | en az bir karakter | boş 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ürleri | LIKE '...' ESCAPE '!' standarttır ve her yerde çalışır. |
| SQL Server | Ayrıca köşeli parantezle de kaçırılabilir: LIKE 'e[_]%'. Köşeli parantez SQL Server'a özgüdür. |
| MySQL, PostgreSQL | ESCAPE 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, BigQuery | Varsayılan kaçış karakteri yoktur; ESCAPE yazmak gerekir (BigQuery'de ters bölü desteklenir). |
_ 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.