Aynı şehir, beş farklı yazım
raw_signups tablosunda İstanbul; “ISTANBUL”, “istanbul”, “İstanbul” diye üç farklı biçimde geçiyor. Gruplamadan önce her değeri tek bir anahtar biçimine çevirmek gerekir: boşlukları kırp, Türkçe karakterleri sadeleştir, büyük harfe çevir.
TRANSLATE: karakter karakter değiştir
TRANSLATE(metin, 'bulunan', 'yerine'), ikinci listedeki her karakteri üçüncü listede aynı sıradaki karakterle değiştirir. Tek tek REPLACE yazmaktan çok daha kısadır. SQL Server (2017+), PostgreSQL ve Oracle'da vardır; MySQL ve SQLite'ta iç içe REPLACE yazılır.
SELECT DISTINCT city,
UPPER(TRANSLATE(TRIM(city), 'İıŞşĞğÜüÖöÇç', 'IiSsGgUuOoCc')) AS anahtar
FROM raw_signups
WHERE LEN(TRIM(city)) > 0;
TRANSLATE('a-b', '-', '') → ab.LEN(TRIM(city)) > 0?Oracle boş metni ('') NULL kabul eder; city <> '' koşulu Oracle'da hiçbir satır döndürmez. Uzunluk kontrolü her SQL türünde aynı çalışır.Sesçil benzerlik: SOUNDEX ve DIFFERENCE
SOUNDEX bir kelimeyi okunuşuna göre 4 karakterlik bir koda çevirir: “Mehmet” ve “Mehmed” aynı kodu (M530) alır. SQL Server'daki DIFFERENCE(a, b) iki kodun kaç karakterinin tuttuğunu 0–4 arası verir.
SELECT SOUNDEX('Mehmet') AS a,
SOUNDEX('Mehmed') AS b,
DIFFERENCE('Mehmet', 'Mehmed') AS benzerlik;
Düzenleme mesafesi: Levenshtein
İki metni birbirine dönüştürmek için gereken en az harf ekleme, silme veya değiştirme sayısıdır: “Ankara” ile “Ankra” arasındaki mesafe 1'dir. Yazım hatalı kayıtları bulmak için idealdir.
| SQL türü | Fonksiyon |
|---|---|
| PostgreSQL | levenshtein(a, b) (fuzzystrmatch eklentisi) |
| Oracle | UTL_MATCH.EDIT_DISTANCE(a, b) |
| SQL Server, MySQL | Yerleşik değil; kullanıcı tanımlı fonksiyon veya uygulama tarafında hesaplanır |
SELECT levenshtein('Ankara', 'Ankra') AS mesafe;