MS-SQL | Grup, Tarih ve Zaman Fonksiyonları!

MS-SQL | Grup, Tarih ve Zaman Fonksiyonları! Merhaba arkadaşlar, Tüm hızımızla SQL dersimize devam ederiz ve MS – SQL ‘de fonksiyonlara geçiyoruz. Öncelikle bu makalemizde Aggregate şeklinde isimlendirilen Gruplama Fonksiyonlarının bir yönü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 yönünü göreceğiz. Göreceğimiz binalar 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 aşırı önemlidir.Bu sebepten dolayı bu yapıların kullanımlarını kuralına göre göreceğiz. Makalemize Grup Fonksiyonlarını anlatarak başlayalım.   AVG : Bir küme 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 kıymet taşıyan,herhangi bir kolona göre olabilmekte bu. Örnek:   Select AVG(yas) From Ogrenciler dediğimiz süre Ogrenciler tablosunda kayıtlı öğrencilerin ıslak 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 bütün kayıtları sayar ve sayısını ekrana verir;Ancak bu sorguyu aşağıdaki biçimde de kullanabilirdik:   Select COUNT(Ad) From Ogrenciler Şimdi bu halde bahsettiğimiz hususlardan birisi ile karşılaşabiliriz. Şöyle ki, Kayıtlar arasında Ad endüstrisi NULL olan bir kayıt bulunduğu takdirde bu kayıt sayılmayacaktır.   Bu nedenle böyle bir vaziyet ile karşı karşıya kalmamak için ya COUNT() ya da NULL olmayacağı kesin olan bir piyasa ile çağırın.   * ile çağırmak daha garanti olsa da performans açısından bir saha ismi ile çağırmak daha uygundur.   Bir öbür husus ise Alan ismi 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 netice da bu zaten.Ama ben kaç tane tekil İsim olduğunu öğrenmek istiyorsam ne olacak.Bu halde devreye DISTINCT niteliği giriyor devreye.   Select COUNT(DISTINCT Ad) From Ogrenciler halinde çağırmam mecburiyetinde 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 saha bazında toplamlarını verir.Seçilen alanların sayısal olması koşulu ile. Örnek: select SUM(yas) From Ogrenciler   Bu fonksiyonların daha karmaşık kullanması nebati ki mevcut.Ben daha aşırı temel kullanımlarını verdim,siz ihtiyacınız doğrultusunda geliştireceksiniz.   misal MAX fonksiyonu için düşünürsek. Ogrenciler tablomuz için Maximum yaşa sahip olan öğrencinin bütün bilgilerini çekmek için aşağıdaki biçimde 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 bina sistemin o andaki tarihini verir. Select GETDATE() –> Sonuç : 2011-11-11 10:13:47.957   DATEADD : Bu yapı,belli bir tarihin üzerine bir kıymet ekleyerek yeni bir tarih elde etmemize yarar.Ekleme işlemini Yıl,Ay,Gün,Saat,Dakika vs biçiminde yapabiliriz.Bu yapının kullandığı üç argüman vardır. İlki tarihin hangi kıymet üstünden arttılıp azalacağı.Yani gün şekilde mı ay şekilde yıl,saat? Tabi bunu kullanmanın belirgin başlı kuralları var.Her kıymet 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 binalar da mevcut fakat dahasını lüzumsuz bulduğum için eklemiyorum. Gelelim ikinci argümana ki bu da değiştirilecek miktarı belirler.Bu kıymet negatif vey a pozitif olabilir;ancak sayısal bir kıymet 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 tıpkı biçimde tablodaki kayıtlara da uygulayabiliriz.Örnek: Select DATEADD(dd,7,kayitTarihi) From Ogrenciler   DATEDIFF : Verilen iki tarih arasındaki farkı arzulanan bazda (gün,ay,yıl vs) verir.Yukarda tarihler için verdiğim kısaltmalar bütün tarih fonksiyonlarında geçerli bulunduğu için yine yeniden yazmıyorum.Bu fonksiyonun da üç adet argümanı vardır. İlki tıpkı biçimde 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 muhteşem ayrıntıları 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 şekilde çektim.   DATEPART : Bu yapımızda iki argüman ile kullanılır.İlki çekilecek olan tarih kısmı ikincisi de tarih kıymeti olmak üzere. misal : SELECT DATEPART(hh,getdate()) –> Sonuç : on SELECT DATEPART(wk,getdate()) –> Sonuç : 46 SELECT DATEPART(yy,getdate()) –> Sonuç : 2011


Yapılan Yorumlar
Erdem OFLAZ

Bir mum, diğer mumu tutuşturmakla ışığından bir şey kaybetmez.
 Kategoriler
 Popüler yazılar