2011-07-05 13 views
6

Bu yüzden bir tablo aşağıda belirtilen adresSQL - Geçerli tarih/zaman sonra kayıtlarını seçin

Date  Time  Field3  Field4 - etc. 
-------------------------------------------------- 
05/07/11 17:45  blah   blah 
05/07/11 19:45  blah   blah 
08/07/11 17:30 
08/07/11 19:00 
09/07/11 19:00 

vb

benim böylece Bildirimi tüm gün arasında gösterir Şu anda altında bir kural

bugün (yani aynı tarihe kadar 05/07/11 3 yıl sonra 05/07/14).

Ayrıca, WHERE Deyimi altında başka bir kural eklemek istiyorum, böylece yalnızca geçerli zamandan iki saat önce (geçerli tarih tablonun bulunduğu tarihe eşit olduğunda) zaman göstermesidir.

Yani saat 19.00'da 05/07/11 tarihinde bu göstermelidir:

Date  Time  Field3  Field4 - etc. 
-------------------------------------------------- 
05/07/11 17:45  blah   blah 
05/07/11 19:45  blah   blah 
08/07/11 17:30 
08/07/11 19:00 
09/07/11 19:00 

aynı gün 21:46 de, şimdi göstermelidir:

Date  Time  Field3  Field4 - etc. 
-------------------------------------------------- 
08/07/11 17:30 
08/07/11 19:00 
09/07/11 19:00 

nasıl olur Bunu SQL'imde yapıyorum? Bence o zaman ya da o zaman ne zaman bir açıklama yapmalıyım diye düşünüyorum, ama bunu yapabildim mi?

AYLAR Tarih VB.Net içinde üretilir, bu yüzden zaman olur. Güncel sql (ve çalışma) kodudur:

SELECT m.MatchID Manage, m.Date, m.Time, t.TeamCode "Home", b.TeamCode "Away", 
g.GroundName "Ground", (SUBSTRING(u.GivenName,1,1) + '. ' + RTRIM(u.Surname)) AS Referee, 
(SUBSTRING(v.GivenName,1,1) + '. ' + RTRIM(v.Surname)) AS "Assistant 1", 
(SUBSTRING(w.GivenName,1,1) + '. ' + RTRIM(w.Surname)) AS "Assistant 2", 
a.FOfficialID, a.AssessorID, a.RefereeAID, a.AReferee1AID, a.AReferee2AID, 
a.FOfficialAID, a.AssessorAID, 'Details' "Details", t.AgeGroupID, r.WetWeatherID 

FROM Match m 
LEFT OUTER JOIN Appointment a ON m.MatchID=a.MatchID 
LEFT OUTER JOIN WetWeather r ON r.MatchID=m.MatchID 
INNER JOIN Team t ON m.HomeTeamID=t.TeamID 
INNER JOIN Team b ON m.AwayTeamID=b.TeamID 
INNER JOIN Ground g ON g.GroundID=m.GroundID 
LEFT OUTER JOIN Users u ON u.UserID=a.RefereeID 
LEFT OUTER JOIN Users v on v.UserID=a.AReferee1ID 
LEFT OUTER JOIN Users w on w.UserID=a.AReferee2ID 

WHERE (m.Date BETWEEN '05-Jul-2011' AND '05-Jul-2014') 
+0

Hangi DBMS'yi kullanıyorsunuz? –

+0

Ve DATE ve TIME sütunları hangi veri türleridir? – MatBailie

+0

sql server 2008 – user829634

cevap

3

Tarih ve Saat sütunları ekleme ve -2 saat +3 yıl arayla karşılaştır. Yukarıdaki sorguda Tarihte herhangi bir dizin kullanılabileceğinden emin değil. Üste | Geri Bildirim Ver Daha fazla bilgi Daha fazla bilgi edinin. Performans sorunlarınız varsa bunun yerine bunu deneyebilirsiniz. Bir Tarih dizini kullanarak daha iyi bir iş yapabilir.

select * 
from YourTable 
where Date between cast(getdate() as date) and dateadd(year, 3, getdate()) and 
     Date+cast(Time as datetime) > dateadd(hour, -2, getdate()) 
3

Eğer veritabanları zaman ve tarih alanına kullanırsanız, basit geçerli tarihe karşılaştırmak olabilir/saat

… 
WHERE `Date` > NOW() 
AND `Time` > NOW() 
+0

sadece tarihlerden sadece 10:10 ile sadece daha sonradan daha büyük tarihler getiriyor, bu nedenle yukarıdaki tablolardan, itd hiçbir şeyi geri getirmiyor – user829634

+0

Eh, NEREDE (MİDE ARASINDA '05-Jul-2011 've' 05-Japon-2014 ') 'çalışma örneğinizde, neden sadece zamana kadar hesaplamıyorsunuz, hesaplanan (VB) tarih ve saati geçmiyorsunuz WHERE cümleciğine Öyleyse, çalışma örneğinizde çözüme sahipseniz, soru neydi? – feeela

+0

tamam, bana ne anlatmaya çalıştığını anlıyorum, ama ben zaten bunu denedim: 'NEREDE (MEKTUP ARASINDA '05-TEMMELİ 2011' VE '05-SEÇ-2014 ') VE m.Time> = '20 : 36 '' sadece 5 Temmuz'dan daha büyük tarihler getiriyor ve 20:36'dan daha uzun bir zamana sahip olmak istiyorum, şimdiki zamanın ardından tüm zamanların bir takvime benzeyen 6. takvimini her zaman göstermesini istiyorum - 2hours – user829634

1

bir şekilde birleştirilmesi suretiyle yapacağını alt sorgu. gibi bir şey:

 select ... 
    from Match as m 
    inner join 
     (select mSub.MatchID, 
     case when Date+cast(Time as datetime) between dateadd(hour,-2,getdate()) 
      and getdate() then 1 else 0 end as Show 
     from Match as mSub 
     where Date between 
      cast(getdate() as date) 
      and cast(dateadd(year,3,getdate()) as date) 
     ) as Control 
     on Control.MatchID=m.MatchID 

Yani alt sorgu size VAKA açıklamada kullanabileceğiniz göster sütununu verir ve bu senin filtreleme yapar.