Diyelim Makaleler adında bir Tablomuz Var.
ve alanları;
IDMakale int,
Baslik nvarchar(30),
Tarih DateTime,
Icerik Text,
Durum Bit
ve alanları;
IDMakale int,
Baslik nvarchar(30),
Tarih DateTime,
Icerik Text,
Durum Bit
Burada Yapılmak istenen şudur;
Kendinize ait örneğin ASP projesi kullanarak Kişisel web sayfanızı yaptınız. Ve Yayınladığınız çeşitli makalelerinizi ay ve yıl bazında arşivlemek istiyorsunuz. (Küçük bir Blog Örneği Sayılabilir.)
Tarih Kolonunu Kullanarak örneğin 09.2007 a ait kaç adet makale var onu bulmak istiyoruz.
Dikkat edersen;
Yedinci (07-2007) aya ait 1 adet makale var.
Sekizinci (08-2007) aya ait 1 adet makale var.
Dokusuncu (09-2007) aya ait 3 adet makale var.
Dokusuncu (09-2006) aya ait 1 adet makale var.
Bu verileri kullanarak aşağıdaki sonuç elde edilmek isteniyor.
Listeleme kriteri büyükten küçüğe olacak (desc)
İlgili Kod Blogu:
/* Convert kullanarak Tarih Alanı char veri türüne çevrilir örn07-09-2007)
SubString İle sadece Ay ve Yıl Bilgisi Çekiliyor*/
select distinct substring(Convert(char(10),Tarih,105),4,7) as TarihString,
/*Bu Alt Sorgu ile Kendi içinde ilgili ay ve yıla ait kaç adet Tarih bilgisi olduğu hesaplanıyor
Tarih Alanlarımızı yine Convert İle düzenliyoruz. Burada önemli olan bilgi şudur
Eğer Tarih bilgisine günüde katarsak ilgili ay içerisinde kaç adet olduğunu değil, o aya ait günlerin sayısını buluruz. o yüzden Substring Kullanarak sadece ay ve yıl bilgileri alınır*/
(select Count(*) from makaleler as MS where
substring(Convert(char(10),MS.Tarih,105),4,7)=substring(Convert(char(10),M.Tarih,105),4,7))
as MakaleSayisi,
/*Alttaki kısımda ise tarihi büyükten küçüğe sıralama yaptırmak için küçük bir string birleştirme yapılarak ay ve yılı ters çevirim birleştiriyoruz daha sonra int veri türüne Convert edip Desc sıralamasını yaptırıyoruz
*/
Convert(int,Substring(Convert(char(10),Tarih,104),7,4)+ Substring(Convert(char(10),Tarih,104),4,2))
as DescDeger
from makaleler as M
order by DescDeger desc