Son Haberler
Anasayfa / Yazılım / SQL / CHARINDEX Fonksiyonu

CHARINDEX Fonksiyonu

CHARINDEX fonksiyonu ile bir string türündeki veri içinde istediğimiz bir string verinin (bir karakter olabilir, birden fazla karakter olabilir) başladığı noktayı tespit edebiliriz. Örneğin e-mailleri tutan bir alanınız mevcut, burada @ işareti öncesi ve sonrasını belirlemede kullanabilirsiniz. Bunun gibi bir çok alanda CHARINDEX kullanılır. Kullanımı oldukça basittir. Örnekler üzerinden gidelim :

Person.Person tablosunda FirstName ve LastNamealanında a ve A harfinin yerini aratıyorum.

SELECT FirstName, CHARINDEX('A',FirstName) 
AS "A harfinin konumu:",
CHARINDEX('a',FirstName) AS "a harfinin konumu"
FROM Person.Person

Aşağıdaki sonuçlardan görüleceği üzere a ve A ikisi de aynı değerler. Ayrıca aranan değerin ilk bulunduğu konumunun yeri döner. Diğer sonraki konumlar dikkate alınmaz.Dolayısı ile aynı sonucu dönüyorlar yani tek karakter için büyük küçük harf ayrımı yok.

020102

Peki şimdi soyad alanında bir karakterden fazla arama yapalım, bu sefer büyük küçük durumuna dikkat edelim.

SELECT BusinessEntityID,LastName, 
CHARINDEX('be',LastName) AS "be harflerinin konumu:",
CHARINDEX('Be',LastName) AS "Be harflerinin konumu"
FROM Person.Person 
WHERE BusinessEntityID 
IN (295,2170,3,5,8,445,447,455,457,19976)

Durumu gösterebilmek adına belli ID’ler için filtreleme yaptım. Görüldüğü gibi yine fark yok. Bu kısımda yabancı forumlarda denk geldiğim bazı yazılarda farklı olduğunu iddia edenler mevcuttu. Hatta görseller ile göstermişler. Ancak benim kullandığım ve yaptığım bu sorguda bir fark görmedim. SQL SERVER 2012 versiyonlarından kaynaklanan bir durum olabilir düşüncesindeyim, bilginize.

020103

CHARINDEX kullanırken ayrıca bir 3. ifade daha kullanabiliriz. Bu 3. ifadeyi kullanırsak bu sefer şunu demiş oluyoruz, ilgili veri stringinde şu kadar karakterden sonraki kısımda ara..

Yani şöyle diyeyim, CHARINDEX(‘a’,Soyad,3) dediğimizde Soyad alanında 3. karakterden sonra a’yı ara ve yerini bul. Bununla alakalı sorgu yazalım :

SELECT FirstName, CHARINDEX('a',FirstName,3)
AS "3 karakter geçtikten sonraki ilk bulunan konum"
FROM Person.Person

Görüldüğü üzere ilk 3 karakterdeki a’lar dikkate alınmıyor ve sonrasında bulduğu a’nın konumunu dönüyor.

020104

2 yorum

  1. Merhabalar
    Bu büyük küçük harf duyarlılığı kısmı veritabanının karakter kodlaması ile ilgili bir durumdur. Sql server versiyonu ile alakalı değildir. Turkish_ci_as kodlamasında büyük küçük harf duyarlılığı yoktur ancak turkish_ci_ai kodlamasında vardır. Bu kodlama veritabanı oluştururken seçilir.

  2. Bilgi için teşekkürler.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir