T-SQL LIKE Komutu

SQL Server’da LIKE operatörü, bir sütunda belirli bir satırla eşleşen verileri aramak için kullanılır. LIKE komutu where ifadesinden sonra kullanılmaktadır. LIKE komutu genellikle metinsel aramalar için kullanılmaktadır. Genellikle VARCHAR, NVARCHAR, CHAR, NCHAR gibi metin veri tiplerinde arama yapmak için tasarlanmıştır. Sorgulamak istediğimiz karakter farklı türde ise cast veya convert dönüşüm komutlarıyla yukarıda belirtilen metinsel türlere dönüştürülmektedir. LIKE komutuyla ilgili kullanılan genel ifadeleri gözlemleyelim.

Temel LIKE komutu:

SELECT * FROM TabloName WHERE Kolon1 LIKE 'DEGER1';

LIKE komutunda kullanılan Wildcards ifadeleri:

%: Kullanılacak bölümde gelen tüm ifadeleri kapsamaktadır. Aşağıdaki ifadede a ile başlayan tüm kayıtları listelemektedir.

 SELECT * FROM TabloName WHERE Kolon1 LIKE 'a%'

Aşağıdaki komut a ile biten tüm kayıtları getirmektedir.

 SELECT * FROM TabloName WHERE Kolon1 LIKE '%a'

Aşağıdaki komut bölümünde içerisinde ab geçen tüm ifadeleri getirmektedir.

SELECT * FROM TabloName WHERE Kolon1 LIKE '%ab%'

Aşağıdaki komut ile ilk harfi m son harfi y olan tüm değerleri getirelim.

SELECT * FROM TabloName WHERE Kolon1 LIKE 'm%y'

Aşağıdaki komut ile birden fazla kolon üzerinden filtreleme yapabiliriz.

SELECT * FROM TabloName WHERE Kolon1 LIKE '%y' And Kolon2 'm%'

Aşağıdaki komut ile m harfiyle başlayacak içerisinde yu ifadesi geçecek fitreleme

SELECT * FROM TabloName WHERE Kolon1 LIKE 'm%yu%'

_(Alt Çizgi): Tek bir karakteri temsil etmektedir.

Aşağıdaki komut ile a ile başlayan 3 karakterli kayıtları getirmektedir. Her alt çizgi bir karakteri temsil etmektedir.

SELECT * FROM TabloName WHERE Kolon1 LIKE 'a___'

Aşağıdaki komut ile a ile başlayan en az 3 karakterli kayıtları getirmektedir.

SELECT * FROM TabloName WHERE Kolon1 LIKE 'a___%'

Aşağıdaki komut ile a ile başlayan ikinci karakteri fark etmez 3 karakteri y olan tüm kayıtları getirelim.

SELECT * FROM TabloName WHERE Kolon1 LIKE 'a_y%'

[ ] (Köşeli Parantez): Belirtilen aralık veya karakter kümesindeki tek bir karakteri temsil eder. Ya da mantığıyla çalışmaktadır.

Aşağıdaki komut ile İlk harfi ‘a’, ‘b’ veya ‘c’ olan kayıtları getirmektedir.

SELECT * FROM TabloName WHERE Kolon1 LIKE '[abc]%'

Aşağıdaki komut İlk harfi ‘a’-‘d’ aralığında olan kayıtları getirmektedir.

SELECT * FROM TabloName WHERE Kolon1 LIKE '[a-d]%'

Aşağıdaki komut ile kolon değeri içerisinde m veya y ifadesi geçen sonuçları getirmektedir.

SELECT * FROM TabloName WHERE Kolon1 LIKE '%[my]%'

[*-*]: Belirtilen ifade aralığındaki değerleri getirmektedir.

Aşağıdaki komut ile çağrılan kolonun baş harfi m ile y arasında olan tüm değerleri getirmektedir.

SELECT * FROM TabloName WHERE Kolon1 LIKE '%[m-y]%'

[^] veya [!] (Negatif Köşeli Parantez):Belirtilen aralık veya kümede OLMAYAN tek bir karakteri temsil eder.

Aşağıdaki komut ile baş harfi m olmayan tüm değerleri getirmektedir.

SELECT * FROM TabloName WHERE Kolon1 LIKE '[^m]%'

Aşağıdaki komut ile İlk harfi ‘a’, ‘b’, ‘c’ olmayan kayıtları getirmektedir.

SELECT * FROM TabloName WHERE Kolon1 LIKE '[^abc]%'

Aşağıdaki komut ile İlk harfi ‘a’-‘d’ aralığında olmayan kayıtları getirmektedir.

SELECT * FROM TabloName WHERE Kolon1 LIKE '[^a-d]%'

NOT LIKE: Belirtilen ifadeyle eşleşmeyen kayıtları getirmektedir.

Aşağıdaki komut ile a ile başlayan tüm ifadeleri döndürmez.

SELECT * FROM TabloName WHERE Kolon1 NOT LIKE 'a%'

INT, FLOAT, DECIMAL gibi sayısal tiplerde doğrudan LIKE kullanılamaz. CAST/CONVERT ile metne dönüştürme işleminin yapılması gerekmektedir.

SELECT * FROM TabloName WHERE CAST(urun_kodu AS VARCHAR) LIKE '12%'

DATE, DATETIME gibi tiplerde doğrudan LIKE kullanılmaz. ilgili tarihi belirli formatta metinsel çeviri yapmış olacağız.

 SELECT * FROM TabloName WHERE CONVERT(VARCHAR, kayit_tarihi, 112) LIKE '202301%'

Escape: LIKE ifadesinden sonra aranan değerin özel karater olması dahilinde bu ifade kullanılmaktadır. Escape sayesinde ilgili ifadenin özel karakter olmadığını belirtiyoruz. Eğer aşağıdaki ifadeye escape ifadesi konulmasaydı. Sonucumuz 2. karakter için rastgele bir değer oluşturmuş olacaktık.

SELECT * FROM TabloName WHERE Kolon1 LIKE 'y_m%' Escape '_'

LIKE ‘%aranan%’ şeklindeki aramalar indeks kullanımını engeller. LIKE ‘aranan%’ şeklinde baştan aramalar daha verimlidir. Büyük veri kümelerinde full-text search alternatif olarak düşünülebilir.

Bu makalede LIKE operatörünü detaylı bir şekilde görmüş olduk. Başka bir makalede görüşmek dileğiyle..

“Kullarım sana Beni sorarlarsa, bilsinler ki Ben, şüphesiz onlara yakınım. Benden isteyenin, dua ettiğinde duasını kabul ederim. Artık onlar da davetimi kabul edip Bana inansınlar ki doğru yolda yürüyenlerden olsunlar.” Bakara Suresi-186

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir