none
Farklı iki tarih arası sorgu problemi. RRS feed

  • Soru

  • Merhaba Arkadaşlar,

    Sizden aşağıdaki konuda yardım rica ediyorum.

    Vb.Net 'te yazmaya çalıştığım bir proğramım var. Db olarak MsSql 2008 kullanıyorum. Problemim Sql sorgumla ilgili olduğunu düşündüm ve bu yüzden burada sordum.

     

    Diğer kriterler ile birlikte farklı iki tarih arasını datagridview de listelemek istiyorum. Ben dtpicker lardan Başlanğıç ve Bitiş tarihini seçiyorum örn: 01.04.2011  ile 04.04.2011 tarihler arasını listelemek istiyorum listele butonuna bastığımda başlangıç tarihini 01.04.2011 dahil olarak vermiyor.  02.04.2011 ve 04.04.2011 arası verileri listeliyor.

    Konu hakkında yardımlarınızı rica ediyorum.

    Syg.

    If TextPersonelAra.Text <> "" And TextGorevAra.Text <> "" And ComboDurumAra.Text <> "" And DtBasTarihAra.Checked = True And DtBitTarihAra.Checked = True Then

    'Sorgum;

    CmdKayitAra.CommandText = "Select Gorev.GorevAd,Gorev.Oncelik,Gorev.Durum,Gorev.Tamamlanan,Gorev.BaslTarih,Gorev.BaslSaat,Gorev.BitTarih,Gorev.BitSaat,Gorev.Aciklama,Personel.AdSoyAd From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where AdSoyAd like @AdSoyAd And GorevAd like @GorevAd And Durum =@Durum And BaslTarih >= @BaslTarih And BitTarih <= @BitTarih"

     CmdKayitAra.Parameters.AddWithValue("@AdSoyAd", "%" & TextPersonelAra.Text & "%")
                CmdKayitAra.Parameters.AddWithValue("@GorevAd", "%" & TextGorevAra.Text & "%")
                CmdKayitAra.Parameters.AddWithValue("@Durum", ComboDurumAra.Text)
                CmdKayitAra.Parameters.AddWithValue("@BaslTarih", DtBasTarihAra.Value)
                CmdKayitAra.Parameters.AddWithValue("@BitTarih", DtBitTarihAra.Value)

    CmdKayitAra.ExeCuteNonQuery

     

     

    4 Nisan 2011 Pazartesi 08:21

Yanıtlar

  • Yazdığım CONVERT satırını sorgunun içerisine yazmanız yeterli olacaktır. Yani sorgunun son şekli aşağıdaki gibi olacaktır.

     

    CmdKayitAra

    .CommandText = "Select Gorev.GorevAd,Gorev.Oncelik,Gorev.Durum,Gorev.Tamamlanan,Gorev.BaslTarih,Gorev.BaslSaat,Gorev.BitTarih,Gorev.BitSaat,Gorev.Aciklama,Personel.AdSoyAd From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where AdSoyAd like @AdSoyAd And GorevAd like @GorevAd And Durum =@Durum And CONVERT(CHAR(10),BaslTarih,104) >=@BaslTarih AND CONVERT(CHAR(10),BitTarih,104) <= @BitTarih"

    Başka bir yöntem olarak ta bitiş tarihinin tüm günü alabilmesi için aşağıdaki gibi de bir değişiklik yapabilirsin.

    BaslTarih

    >=@BaslTarih AND BitTarih<=@BitTarih+

    ' 23:59:59'

     
    Ahmet Kaymaz
    http://www.ahmetkaymaz.com
    SQL Server & C# bloglama
    • Yanıt Olarak İşaretleyen levent_ozturk 4 Nisan 2011 Pazartesi 10:15
    4 Nisan 2011 Pazartesi 09:33

Tüm Yanıtlar

  • Merhaba Levent,

    BaslTarih ve BitTarih alanları datetime / smalldatetime türünde olduğu için ve alanlarda saat:dakika:saniye bilgisi olduğu için sorun çıkıyor olabilir. Örneğin BitTarih alanında 04.04.2011 ve 2011-04-04 14:15:00 değerlerinin olduğunu düşünelim.  WHERE BitTarih<='04.04.2011' filtresine göre 2011-04-04 00:00:00 değeri gelecek ancak 2011-04-04 14:15:00 değeri gelmeyecektir. Bunun çözmek için iki alternatif kullanılabilir. Ya bitiş tarihi +1gün yapılır. WHERE BitTarih<='05.04.2011' şeklinde. VEYA aşağıdaki sorguyu değiştirebilirsin.

    CONVERT

    (CHAR(10),BaslTarih,104) >=@BaslTarih AND CONVERT(CHAR(10),BitTarih,104) <= @BitTarih

    Böylece tüm tarihleri YYYY.MM.DD formatına getirip o şekilde filtreleme yapılmış olur.


    Ahmet Kaymaz
    http://www.ahmetkaymaz.com
    SQL Server & C# bloglama
    4 Nisan 2011 Pazartesi 08:43
  • Merhaba Ahmet Bey,

    Cevabınız için tşk.ederim.

    Bahsettiğiniz problemi yaşamamak için tarih alanımı date olarak yapmıştım. Fakat yine sizin yazdıklarınız ışık oldu:) db ye kayıt olan tarih alanım 2011-04-04 şeklindeydi. Bende buna karşılık aşağıdaki gibi bir değişiklik yaptım ve oldu.

    CmdKayitAra.Parameters.AddWithValue("@BaslTarih", DtBasTarihAra.Value.ToString("dd-MM-yyyy"))
    CmdKayitAra.Parameters.AddWithValue("@BitTarih", DtBitTarihAra.Value.ToString("dd-MM-yyyy"))

    Fakat biraz daha profesyonelce yapmak istiyorum. Bu işlemi yada bu işleme karşılık gelen kodu aşağıdaki Sorgumda halledemezmiyim acaba ?

    CmdKayitAra.CommandText = "Select Gorev.GorevAd,Gorev.Oncelik,Gorev.Durum,Gorev.Tamamlanan,Gorev.BaslTarih,Gorev.BaslSaat,Gorev.BitTarih,Gorev.BitSaat,Gorev.Aciklama,Personel.AdSoyAd From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where AdSoyAd like @AdSoyAd And GorevAd like @GorevAd And Durum =@Durum And BaslTarih >= @BaslTarih And BitTarih <= @BitTarih"

    Tşk.

    4 Nisan 2011 Pazartesi 08:59
  • Yazdığım CONVERT satırını sorgunun içerisine yazmanız yeterli olacaktır. Yani sorgunun son şekli aşağıdaki gibi olacaktır.

     

    CmdKayitAra

    .CommandText = "Select Gorev.GorevAd,Gorev.Oncelik,Gorev.Durum,Gorev.Tamamlanan,Gorev.BaslTarih,Gorev.BaslSaat,Gorev.BitTarih,Gorev.BitSaat,Gorev.Aciklama,Personel.AdSoyAd From Gorev INNER JOIN Personel ON Gorev.PersonelID=Personel.PersonelID Where AdSoyAd like @AdSoyAd And GorevAd like @GorevAd And Durum =@Durum And CONVERT(CHAR(10),BaslTarih,104) >=@BaslTarih AND CONVERT(CHAR(10),BitTarih,104) <= @BitTarih"

    Başka bir yöntem olarak ta bitiş tarihinin tüm günü alabilmesi için aşağıdaki gibi de bir değişiklik yapabilirsin.

    BaslTarih

    >=@BaslTarih AND BitTarih<=@BitTarih+

    ' 23:59:59'

     
    Ahmet Kaymaz
    http://www.ahmetkaymaz.com
    SQL Server & C# bloglama
    • Yanıt Olarak İşaretleyen levent_ozturk 4 Nisan 2011 Pazartesi 10:15
    4 Nisan 2011 Pazartesi 09:33
  • Ahmet Bey Mrb,

    Yardımlarınız için çok tşk.ederim.

    4 Nisan 2011 Pazartesi 10:15