7
votes

SQL - Sélectionner des enregistrements après la date / heure actuelle

J'ai donc une table indiquée ci-dessous xxx pré>

etc. p>

Je dispose actuellement d'une règle sous mon relevé de mon article qui se présente tous les jours d'aujourd'hui ( il serait donc 05/07/11 jusqu'à la même date 3 ans plus tard 05/07/14). P>

Je voudrais également ajouter une autre règle sous la relevé où il ne montre que des temps (quand La date actuelle est égale à la date du tableau) Deux heures avant l'heure actuelle. P>

SO Le 05/07/11 à 19h00 Il devrait indiquer: P>

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') 


2 commentaires

Quel SGBD utilisez-vous?


Et quels types de données sont les colonnes de date et d'heure?


3 Réponses :


3
votes

Si vous utilisez les champs de temps et de date de données, vous pouvez comparer simple à la date / heure actuelle xxx


5 commentaires

qui ne rapporte que des dates seulement plus grandes qu'aujourd'hui avec seulement les temps plus tard que 10:10, donc des tables ci-dessus, ITD ne ramène rien


Eh bien, vous utilisez où (M.Date entre '05 -Jul-2011 'et '05 -JUL-2014') dans votre exemple de travail, pourquoi ne pas simplement l'étendre à l'époque, en passant la date et l'heure calculées (via VB) dans la clause WHERE. Alors, quelle était la question, si vous avez la solution dans votre exemple de travail?


D'accord, je comprends ce que tu tentaits de me dire, mais j'ai déjà essayé cela: "Où (M.Date entre "05 -Jul-2011" et '05 -JUL-2014 ') et M.time> = 36 '' Ne ramène que les dates de retour supérieur au 5 juillet et ont une fois plus tard que 20:36, je veux que cela affiche toutes les heures du 6 juillet à partir du 6 juillet, une sorte de calendrier, à tout moment après l'heure actuelle - 2heures


MH, si votre serveur SQL a un type DateTime, vous pouvez vous en tenir à cela. Les œuvres suivantes pour moi (à l'aide de MySQL): Sélectionnez * à partir d'user_attribute Où se trouve entre "2010-12-13 17:54:57" et '2011-02-09 08:36:11' ( Vous devez toujours calculer les dates.) Vous pouvez également créer une vue, en utilisant des champs DateTime, si vous devez laisser la structure de la table comme cela.


Ce serait une date> maintenant () ou (date = maintenant () et heure> maintenant ()) je suppose?



1
votes

Je le ferais en rejoignant une sous-requête. Quelque chose comme: xxx

de sorte que la sous-requête vous donne votre colonne de spectacle que vous pouvez utiliser dans votre déclaration de cas et que votre filtrage.


0 commentaires

4
votes

Ajout de colonnes date et heure et la comparaison contre l'intervalle -2 heures de +3 ans.

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())


0 commentaires