SQL Server'da en sık yapılan işlemler, yazılımın diğer tüm bölümlerinde olduğu gibi string işlemleridir. Bu işlemin ne olduğunu gelin öğrenelim.
SQL Server'da en sık yapılan işlemler, yazılımın diğer tüm bölümlerinde olduğu gibi string işlemleridir. Bu işlemin ne olduğunu gelin öğrenelim.
ASCII | NCHAR | SOUNDEX |
CHAR | PATINDEX | SPACE |
CHARINDEX | REPLACE | STR |
DIFFERENCE | QUOTENAME | STUFF |
LEFT | REPLICATE | SUBSTRING |
LEN | REVERSE | UNICODE |
LOWER | RIGHT | UPPER |
LTRIM | RTRIM |
ASCII
Karakterin ASCII kod tablosundaki karşılığını verir.
ASCII(A)
65 sonucunu verir
CHAR
Girilen 0-255 arası sayının ASCII tablo karşılığını verir.
CHAR(65)
A sonucunu verir
Ascii ve Char fonksiyonları veri türü char,varchar, text (text veri türü yakında kaldırılacaktır) veri türleri için kullanılır. Bu türler herbir karakter için 1 byte yer kaplarlar. 255 e kadar karakter karşılığı vardır. Bu karakterler kümesine Ascii karakter kod tablosu adı verilir. Kod tablosu için tıklayınız.
NCHAR
Sayının Unicod standartlarınca tanımlanmış karşılığını verir
Nchar(63000)
UNICODE
Karakterin Unicode tablosundaki karşılığını verir.
Unicode('¾')
Nchar ve Unicode fonksiyonları nchar,nvarchar ve ntext veri türleri ile kullanılır. Bu türler herbir karakter için 2 byte yer kaplarlar. 65536'ya kadar karakter desteği (çince, fince vs. dillerdeki karakterler) vardır. Unicode hakkında detaylı bilgi için tıklayınız.
CHARINDEX
1. katardaki ifadenin 2. katardaki pozisyonunu verir
Charindex('ne','deneme')
ne ifadesininin deneme deki yerini döndürür. Sonuç 3 olur.
PATINDEX
Bir ifadenin kaydın kaçıncı karakterinden itibaren başladığını bulur.
SELECT id,baslik,PATINDEX('%kayseri%',icerik) FROM haber
sonuçta id, baslik ve icerik alanında kayseri kelimesinin kaçıncı harften sonra başladığını yazar.
Patindex'te like ifadesinden kullanılan % _ [^] [] karakterleri kullanılabilir. Bunlar Charindex'te kullanılamaz.
STUFF
Katar ifadenin belli bir konumundan başlayarak belirtilen kadarını siler, sildiği yere yeni katar ifade ekler
Stuff(‘fatih topcu’,2,5,’deneme’)
Sonuç fdenemetopcu olur. 2. den başlayarak 5 harfi (5.harf boşluk) sildi, o araya deneme yazdı.
SUBSTRING
Bir katar ifadeden, belli bir konumdan başlayarak belirtilen kadarını almasını sağlar
Substring(‘deneme’,1,1)
Sonuç d harfi olur. 1. konumdan başlayarak 1 tanesini aldı
Select adi, soyadi, substring(okulu,1,1) as okulunilkharfi from personel
REVERSE
Katar ifadeyi ters çevirir
Reverse(‘Akml’)
Sonuç lmkA olur
Select adi, reverse(soyadi) from personel
REPLICATE
Katarı ya da harfi istenilen sayı kadar çoğaltır
Replicate(‘0’,4)
Sonuç 0000
REPLACE
Bir katardaki herhangi bir ifadeyi başka bir ifade ile değiştirir
Replace(‘deneme’,’e’,’o’)
Sonuç donomo olur.
LOWER
Büyük harfleri küçük harfe çevirir.
UPPER
Küçük harfleri büyük harfe çevirir.
RIGHT
Katarın sağından belirtilen sayı kadarını alır
LEFT
Katarın solundan belirtilen sayı kadarını alır
LTRIM
Katarın solundaki boşlukları siler
RTRIM
Katarın sağındaki boşlukları siler
LEN
Katarın uzunluğunu verir. Sağdaki boşluklar sayılmaz. Ortadaki ve soldaki sayılır.
SOUNDEX ve DIFFERENCE
Difference iki katardada olan karakterlerin kaç tane olduğunu verir.
SELECT DIFFERENCE('Fatih', 'Fırat')
Sonuç 3
Soundex ise iki katara ait 4 haneli soundex kod üretir. İlk harf katarların 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 ('Fatih'), SOUNDEX ('F ırat')
Sonuç F300 F000 olur
Sorgulamalarda string alanlara ait arama işlemlerinde like metodunu sıklıkla kullanırız. Like büyük hacimli tablolarda işimizi yavaşlatabilir. Bu gibi durumlarda SOUNDEX ve DIFFERENCE fonksiyonları kullanılır
Where koşulunda aşağıdaki şekilde kullanabiliriz:
SELECT ad FROM personel 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 personel WHERE SOUNDEX(ad)=SOUNDEX('Chris')
Bu sorguyla da adı 'Chris' ile % 75 veya daha fazla benzer olan kayıtları sorguladık.