LIKE yetmediğinde
LIKE yalnızca iki joker bilir: % ve _. “İçinde rakam geçen e-postalar”, “birden fazla boşluk”, “@ işaretinden sonraki kısım” gibi işler için düzenli ifadeler (regular expressions, regex) kullanılır.
| Desen | Anlamı | Örnek |
|---|---|---|
^ / $ | Metnin başı / sonu | ^A: A ile başlar |
. | Herhangi bir karakter | a.c: abc, a1c |
[abc], [0-9] | Kümeden bir karakter | [0-9]: bir rakam |
[^0-9] | Küme dışından bir karakter | rakam olmayan |
* + ? | 0 veya daha çok / 1 veya daha çok / 0 ya da 1 | [0-9]+: bir veya daha çok rakam |
{n}, {n,m} | Tam n kez / n ile m arası | [0-9]{4}: 4 rakam |
a|b | a veya b | gmail|hotmail |
\. | Özel karakterin kendisi | \.com$ |
SQL türlerine göre regex
| SQL türü | Eşleşiyor mu? | Değiştir | Parça al |
|---|---|---|---|
| SQL Server 2025 | REGEXP_LIKE(s, p) | REGEXP_REPLACE | REGEXP_SUBSTR |
| PostgreSQL | s ~ p, büyük/küçük harf duyarsız: s ~* p | regexp_replace(s, p, r, 'g') | regexp_substr (15+) |
| MySQL 8 | s REGEXP p, REGEXP_LIKE | REGEXP_REPLACE | REGEXP_SUBSTR |
| Oracle | REGEXP_LIKE(s, p) (yalnızca WHERE içinde) | REGEXP_REPLACE | REGEXP_SUBSTR |
| SQLite | s REGEXP p (eklenti gerekir) | Yerleşik değil | |
SQL Server'ın eski sürümleriREGEXP fonksiyonları SQL Server 2025 ile geldi. Daha eski sürümlerde
LIKE '%[0-9]%' ve PATINDEX ile idare edilir.Deseni sağlayan satırları bulmak
SELECT customer_id, email FROM customers WHERE REGEXP_LIKE(email, '^[a-z]+\.[a-z]+@gmail\.com$');
MySQL'de çift ters bölüMySQL metin sabitlerinde
\ kaçış karakteridir; desendeki \. için '\\.' yazılır. Bunun yerine [.] yazmak her SQL türünde çalışır.Değiştirmek
Ad soyad alanındaki fazladan boşlukları teke indirelim. PostgreSQL'de 'g' bayrağı yazılmazsa yalnızca ilk eşleşme değişir; diğer SQL türleri varsayılan olarak hepsini değiştirir.
SELECT id,
full_name,
TRIM(REGEXP_REPLACE(full_name, ' +', ' ')) AS temiz_ad
FROM raw_signups;
Parça almak
SELECT REGEXP_SUBSTR(email, '[^@]+$') AS alan_adi,
COUNT(*) AS musteri
FROM customers
WHERE email IS NOT NULL
GROUP BY REGEXP_SUBSTR(email, '[^@]+$');
Regex pahalıdırRegex koşulları indeks kullanamaz ve her satırda çalışır. Büyük tablolarda önce basit bir filtreyle (tarih, durum) satır sayısını azalt.