05 Şubat 2007

Soundex ve Difference Fonksiyonları

Sorgulamalarda text alanlara ait arama işlemlerinde like metodunu sıklıkla kullanırız. Like güzel hoş ama, bilhassa büyük hacimli datalarda veya cleanbase olmasını istediğimiz sistemlerde bazen işimizi görmez. Bu gibi durumlarda çok basit iki string fonksiyonu kullanarak işimizi görebiliriz.Bunlar SOUNDEX ve DIFFERENCE fonksiyonları.

SOUNDEX basit anlamda bizim string ifademizi 4 haneli bir koda dönüştürür.Bu kodun ilk harfi string değerimizin ilk harfi olur. Daha sonraki harflerse aşağıdaki eşleştirme tablosundan o harfe karşılık gelen sayı olur.

  • 1 : B,F,P,V
  • 2 : C,G,J,K,Q,S,X,Z
  • 3 : D,T
  • 4 : L
  • 5 : M,N
  • 6 : R
  • Kod yok : A,E,H,I,O,U,Y,W

Select SOUNDEX('Chris'),SOUNDEX('Chrys') ifadesinden bize dönen değerler;

C620 ve C620 olacaktır.

Where koşulunda aşağıdaki şekilde kullanabiliriz:

SELECT ad FROM tableX WHERE SOUNDEX(ad)=SOUNDEX('Chris')
Bu sorgu sonucu benzerlik kodu 'Chris' ile aynı olan isimler döner.
DIFFERENCE fonksiyonu da bize bu 4 haneli kodlardan iki string arasındaki benzerliği vermektedir.
SELECT ad FROM tableX WHERE SOUNDEX(ad)=SOUNDEX('Chris')

Bu sorguyla da adı 'Chris' ile % 75 veya daha fazla benzer olan kayıtları sorguladık.