T-Sql ile Bazı String ve Aggregate Functionlarını kullanmak

Dark-Man

Kıdemli Üye
5 Ocak 2013
4,430
9
I Don't Know
Diyelim Makaleler adında bir Tablomuz Var.
ve alanları;
IDMakale int,
Baslik nvarchar(30),
Tarih DateTime,
Icerik Text,
Durum Bit
resim01.JPG


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 örn:(07-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

resim02.JPG
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.