none
SQL saat karşılaştırma (compare time in sql server) RRS feed

  • Soru

  • İyi günler arkadaşlar.

    Veritabanımda hbr_yayin_tarih , hbr_yayin_saat ,hbr_yayindan_alma_tarih ,hbr_yayindan_alma_saat adlı 4 sütun mevcut.

    Amacım haberin, yayın tarihi geldiğinde yayına verilmesi ve yayın tarihi süresi bittiği zaman, yani yayından alma tarihi girildiğinde o tarihte yayından alınması.

    Yazdığım sorgu şu ;

    select * from news where hbr_yayin_tarih <= @tarih and hbr_yayindan_alma_tarih >= @tarih and hbr_yayin_saat<=CONVERT(TIME,GETDATE()) and hbr_yayindan_alma_saat>=CONVERT(TIME,GETDATE()) order by ID desc

    bu sorgu başta yararmış gibi geldi bana ama şöyle bir durum var.Mesela yayindan_alma_saat girilmediğinde yani 0 olduğunda patlıyor.Sorgu hatalı oluyor .Çünkü sıfırla karşılaştırıyor.Aynı sıkıntı tarih içinde geçerli ama ben haber_yayından_alma_tarih girilmemişse 31.12.9999 tarihiyle karşılaştır gibi bir kontrol yazdım ve herhangi bir sıkıntı olmadan çalışıyor. Ama buna benzer bir kontrolü saat için yazmam pek mümkün görünmüyor.

    Yardımlarınız için teşekkr ederim.



    MuhammedYEŞİLYURT

    7 Eylül 2014 Pazar 16:36

Yanıtlar

Tüm Yanıtlar

  • Tarihsaat degerini neden gereksiz bir sekilde tarih ve saat sutunlarina ayirdin ki :( Bunu basit bir sekilde 2 datetime tipi sutunla halledebilirdin. Simdi karisik SQL yazman gerekecek:

    SELECT  *
    FROM    news
    WHERE   DATEADD(second,
                    DATEDIFF(second, CAST('' AS DATETIME),
                             CAST(hbr_yayin_saat AS DATETIME)),
                    CAST(hbr_yayin_tarih AS DATETIME)) <= GETDATE() AND ( hbr_yayindan_alma_tarih IS NULL OR DATEADD(second,
                                                                  DATEDIFF(second,
                                                                  CAST('' AS DATETIME),
                                                                  CAST(hbr_yayindan_alma_saat AS DATETIME)),
                                                                  CAST(hbr_yayindan_alma_tarih AS DATETIME)) > GETDATE()
                                                                  )
    ORDER BY id DESC
    
    

    7 Eylül 2014 Pazar 19:23
  • Hocam ilgilendiğiniz için çok teşekkür ederim.

    kodu denedim ama şöyle bir hata verdi;

    "The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value."

    ben tarih ve saat değerlerini nvarchar olarak tuttum ondan kaynaklanıyor galiba.Sizin önereceğiniz bir yöntem var mı ? 

    İlerisi için hem performans açısından hemde kullanımı kolaylığı açısından en mantıklı çözüm nedir sizce Hocam ?


    MuhammedYEŞİLYURT

    7 Eylül 2014 Pazar 20:12
  • Tarih-saati nvarchar olarak tutmak daha da buyuk hata. Sutunlarini datetime'a cevir. Cevirmemekte israr edersen cast() edilip edilemeyecegini de control etmen gerekecek.
    7 Eylül 2014 Pazar 20:28
  • Hayır hocam daha sonra sorun oluşmaması için datetime'e çevireceğim. Yalnız dateTime'a çevirdikten sonra sütunları bireştirmem gerekecek doğru mu hocam.Yalnız birleştirdikten sonra sorgum yine yayindan alma saat konusunda sorun olmayacak mı hocam 


    MuhammedYEŞİLYURT

    7 Eylül 2014 Pazar 20:33
  • Hayir olmayacak. Orayi datetime ve null kabul eder sekilde yaratacaksin. Deger girilmediyse null oldugundan kontrolu kolay.
    • Yanıt Olarak İşaretleyen furkan.kaya 8 Eylül 2014 Pazartesi 14:20
    8 Eylül 2014 Pazartesi 11:32
  • Teşekkür ederim Hocam :) 

    MuhammedYEŞİLYURT

    8 Eylül 2014 Pazartesi 14:19