Grup-Tarih-ve-Zaman-Fonksiyonları_emresupcinMerhaba arkadaşlar,

Tüm hızımızla SQL dersimize devam ediyoruz ve MS – SQL ‘de fonksiyonlara geçiyoruz. Öncelikle bu makalemizde Aggregate şeklinde isimlendirilen Gruplama Fonksiyonlarının bir kısmını göreceğiz. Öncelikle göreceğimiz fonksiyonlar AVG, COUNT, MAX, MIN ve SUM ‘dır.

 

 

Bunları anlattıktan sonra hemen ardından MsSQL ‘de Tarih ve Zaman Fonksiyonlarının bir kısmını göreceğiz. Göreceğimiz yapılar ise GETDATE, DATEADD, DATEDIFF ve DATEPART ‘dır. Zaman Fonksiyonları yapılarının isimlerinden de aşağı yukarı ne işe yaradıklarını anlayabiliriz.Ancak ne işe yaradığı kadar nasıl kullanılacağı da çok önemlidir.Bu yüzden bu yapıların kullanımlarını kuralına göre göreceğiz. Makalemize Grup Fonksiyonlarını anlatarak başlayalım.

 

AVG :
Bir grup kayıt içerisindeki değerlerin ortalamasını döndürür. Peki hangi kolona göre nasıl çeker bu ortalamayı?
Tabii ki sizin seçtiğiniz,ancak sayısal değer taşıyan,herhangi bir kolona göre olabilir bu. Örnek:

 

Select AVG(yas) From Ogrenciler
dediğimiz zaman Ogrenciler tablosunda kayıtlı öğrencilerin yaş ortalamasını hesaplar.

 

COUNT:
Tablodaki kayıt sayısını çeker.Bu fonksiyonda dikkat etmemiz gereken 2 husus vardır. Genel kullanımını aşağıdaki örnekte inceledikten sonra bu hususları açıklayacağım. Örnek:

 

Select COUNT(*) From Ogrenciler
Yukarıdaki satırda Ogrenciler tablosundaki tüm kayıtları sayar ve sayısını ekrana verir;Ancak bu sorguyu aşağıdaki şekilde de kullanabilirdik:

 

Select COUNT(Ad) From Ogrenciler
Şimdi bu durumda bahsettiğimiz hususlardan biri ile karşılaşabiliriz. Şöyle ki, Kayıtlar içerisinde Ad alanı NULL olan bir kayıt olduğu takdirde bu kayıt sayılmayacaktır.

 

Bu nedenle böyle bir durum ile karşı karşıya kalmamak için ya COUNT(*) ya da NULL olmayacağı kesin olan bir alan ile çağırın.

 

* ile çağırmak daha garanti olsa da performans açısından bir alan adı ile çağırmak daha uygundur.

 

Bir diğer husus ise Alan adı ile çağırdığımızda tekrarların sayılıp sayılmayacağı konusu.Misal benim tablomda (Ad alanına göre) 2 adet Mesut,3 adet Murat,1 adet Filiz varsa.Ve ben aşağıdaki sorgu ile çekersem:

 

Select COUNT(Ad) From Ogrenciler
Sonuç : 6 olacaktır.Evet doğru sonuç da bu zaten.Ama ben kaç tane tekil isim olduğunu öğrenmek istiyorsam ne olacak.Bu durumda devreye DISTINCT özelliği giriyor devreye.

 

Select COUNT(DISTINCT Ad) From Ogrenciler
şeklinde çağırmam durumunda Sonuç : 3 olacaktır.

 

MAX – MIN :
Tablodaki kayıtlar içerisinde seçilen değere(alan) göre en büyük ve en küçük değerleri döndürürler.Örnek:

 

Select MAX(yas) From Ogrenciler
Select MIN(yas) From Ogrenciler

 

SUM :
Tablodaki kayıtların seçilen alan bazında toplamlarını verir.Seçilen alanın sayısal olması koşulu ile. Örnek:
select SUM(yas) From Ogrenciler

 

Bu fonksiyonların daha karmaşık kullanımı tabii ki mevcut.Ben daha çok temel kullanımlarını verdim,siz ihtiyacınız doğrultusunda geliştireceksiniz.

 

Örnek MAX fonksiyonu için düşünürsek. Ogrenciler tablomuz için Maximum yaşa sahip olan öğrencinin tüm bilgilerini çekmek için aşağıdaki şekilde bir sorgu kombinasyonu yapmamız gerekecek.

 

Select * From Ogrenciler where yas in(Select MAX(yas) From Ogrenciler)

 

Eveet şimdi Tarih ve Zaman Fonksiyonlarına geçebiliriz…

 

GETDATE :
Bu yapı sistemin o andaki tarihini verir.
Select GETDATE() –> Sonuç : 2011-11-11 10:13:47.957

 
DATEADD :
Bu yapı,belli bir tarihin üzerine bir değer ekleyerek yeni bir tarih elde etmemize yarar.Ekleme işlemini Yıl,Ay,Gün,Saat,Dakika vs şeklinde yapabiliriz.Bu yapının kullandığı 3 argüman vardır.
İlki tarihin hangi değer üzerinden arttılıp azalacağı.Yani gün olarak mı ay olarak yıl,saat?
Tabi bunu kullanmanın belli başlı kuralları var.Her değer için bir kısaltma kullanılır.Bu kısaltmalar ve değerleri aşağıdaki gibidir:
– YIL = yy,yyyy
– AY = mm,m
– HAFTA = wk,ww
– GüN = dd,d
– SAAT = hh
– DAKiKA = mi,n
– SANiYE = ss,s
Yukarda verdiklerim dışında kullanılabilecek yapılar da var ancak dahasını gereksiz bulduğum için eklemiyorum.
Gelelim ikinci argümana ki bu da değiştirilecek miktarı belirler.Bu değer negatif vey a pozitif olabilir;ancak sayısal bir değer olması gerekir.5,-12,21?gibi?
Gelelim son argümanımıza,bud a değişmesini istediğimiz tarihten başkası değildir.Yapı hakkındaki bu kadar bilgi yeterli sanırım gelelim örneklendirmeye.

 
SELECT GETDATE() –> Sonuç : 2011-11-11 10:15:40.800
SELECT DATEADD(dd,4,getdate()) –>Sonuç : 2011-11-15 10:15:40.800

 
Gördüğünüz üzere şimdiki tarihten 4 gün sonrasını getirdi.Bunu aynı şekilde tablodaki kayıtlara da uygulayabiliriz.Örnek:
Select DATEADD(dd,7,kayitTarihi) From Ogrenciler

 
DATEDIFF :
Verilen iki tarih arasındaki farkı istenilen bazda (gün,ay,yıl vs) verir.Yukarda tarihler için verdiğim kısaltmalar tüm tarih fonksiyonlarında geçerli olduğu için tekrar tekrar yazmıyorum.Bu fonksiyonun da 3 adet argümanı vardır.
İlki aynı şekilde farkın hangi türden çekileceğini belirtiyor.
İkinci argüman ve üçüncü argüman farkı alınacak tarihlerdir.Küçük(eski tarih) ilk argümana yazılır.
Bu güzel bilgileri bir de örnek ile taçlandıralım.

 
SELECT DATEDIFF(hh,getdate(), DATEADD(dd,4,getdate())) –> Sonuç : 96
Gördüğünüz üzere bugün ile 4 gün sonrası arasındaki farkı dakika olarak çektim.

 
DATEPART :
Bu yapımızda iki argüman ile kullanılır.İlki çekilecek olan tarih bölümü ikincisi de tarih değeri olmak üzere. Örnek :
SELECT DATEPART(hh,getdate()) –> Sonuç : 10
SELECT DATEPART(wk,getdate()) –> Sonuç : 46
SELECT DATEPART(yy,getdate()) –> Sonuç : 2011

Yazar
Yazar
Bilgisayar Programcısı, Web Tasarımcı, Üniversite Öğrencisi...
Twitter Facebook Google Linkedin Flickr YouTube

Önceki Yazı:MS-SQL | Veri Tipleri ve Özel İfadeler!

Sonraki Yazı:MS-SQL Server Database Backup?

BENZER YAZILAR
YORUMLAR
SİZ DE CEVAP YAZABİLİRSİNİZ
Bu yazı hakkında görüşünüzü belirtin.

ES Web Tasarım Web Tasarım Blog Teması Emre Supçin Bu tema ES Web Tasarım tarafından düzenlenmiştir. Hiçbir şekilde kopyalanamaz.