2011-07-05 83 views
6

所以我有一個表載列如下SQL - 當前日期/時間後選擇記錄

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 

我現在有一個規則下我的WHERE語句,以便爲展示之間的所有天今天(所以這將是05年7月11日,直到3年後的同一日期05/07/14)。

我還想在WHERE語句下添加另一條規則,以便它只在當前時間前兩個小時顯示時間(當前日期等於表中的日期)。因此,在11年5月7日19:00

它應該顯示:

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 

在21:46的同一天,它現在應該顯示:

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

將如何我在我的SQL中這樣做?我認爲如果那時候或者當時的陳述,那麼它就不得不成爲一個案例,但我還沒有能夠解決這個問題?

ALSO日期在VB.Net中生成,時間也是如此。當前的SQL(和工作)代碼:

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

你正在使用哪些DBMS? –

+0

哪些數據類型是DATE和TIME列? – MatBailie

+0

sql server 2008 – user829634

回答

3

添加列日期和時間並與時間間隔-2小時+3年進行比較。

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

不確定在上述查詢中是否可以使用Date中的任何索引。如果你有性能問題,你可以試試這個。使用Date索引可能會做得更好。

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

如果您使用的數據庫的時間和日期字段,你可以簡單的比較當前日期/時間

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

只返回日期大於今天只有晚於10:10的時間,所以從上面的表中,它沒有帶任何東西 – user829634

+0

那麼,你用' WHERE(m.Date BETWEEN '05 -Jul-2011'和'05 -Jul-2014')'在你的工作示例中,爲什麼不把它擴展到時間,通過計算(通過VB)日期和時間進入WHERE子句。那麼,如果你的工作例子中有解決方案,那麼問題是什麼? – feeela

+0

好的,我明白你想告訴我什麼,但我已經嘗試過: 'WHERE(m.Date BETWEEN '05 -Jul-2011'和'05 -Jul-2014')和m.Time> = '20 :36'' 只會帶來大於7月5日的日期,晚於20:36的時間,我希望它從7月6日起顯示所有時間,有點像日曆,在當前時間之後的所有時間 - 2小時 – user829634

1

我會被加入到做子查詢。喜歡的東西:

 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 

所以子查詢給你,你可以在你的CASE語句中使用您的顯示列,它的過濾。

相關問題