En iyi yanıtlayıcılar
SQL saat karşılaştırma (compare time in sql server)

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
Yanıtlar
-
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
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
-
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
-
-
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
-
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
-