Ana içeriğe geç
Kesit SQL
Orta · Fonksiyonlar

Metin temizleme ve benzerlik: TRANSLATE, SOUNDEX, Levenshtein

Türkçe karakterleri sadeleştirmek, yazım farklarını eşleştirmek.

Uygulamada aç, 7 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ç.

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;
SQL Server'da TRANSLATE kuralıİkinci ve üçüncü argüman aynı uzunlukta olmalı, yoksa hata verir. PostgreSQL ve Oracle'da üçüncü liste kısaysa fazlalık karakterler silinir: TRANSLATE('a-b', '-', '') → ab.
Neden 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;
Türkçe için sınırlıSOUNDEX İngilizce okunuşa göre tasarlanmıştır; Türkçe karakterleri yok sayar veya yanlış kodlar. Türkçe isimlerde önce TRANSLATE ile sadeleştirip sonra kullan, sonuçları mutlaka gözle kontrol et.

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
PostgreSQLlevenshtein(a, b) (fuzzystrmatch eklentisi)
OracleUTL_MATCH.EDIT_DISTANCE(a, b)
SQL Server, MySQLYerleşik değil; kullanıcı tanımlı fonksiyon veya uygulama tarafında hesaplanır
SELECT levenshtein('Ankara', 'Ankra') AS mesafe;
Alıştırmalara geç (7)