2016-04-08 6 views
2

Ich habe Tabellenname XYZ, in dem ich 2 Datensätze wie folgt haben.Wählen Datensatz basierend auf Aktuelle Stunde zwischen Stunden in Sql Server 2008 Tabelle gespeichert

Record Prod_available FromTime ToTime 
1   Pizza  08:00  21:59 
2   Beer  22:00  07:59 

Jetzt möchte ich Datensatz basierend auf der aktuellen Stunde auswählen.

Bitte helfen Sie mir im obigen Fall.

+0

@Rory Jaffe I gespeichert Aktuelle Stunde in einer Variablen ex. 'a', das INT von der aktuellen Date-Zeit ist. Dann habe ich in Where-Klausel "a" zwischen FromTime und ToTime geschrieben. Aber 21:55 Uhr stoppt die Auswahl der Datensätze. –

Antwort

1

Diese funktionieren sollte. Retweeted @ Gordon Linoff-Code.

where 
(
((FromTime < ToTime) and @time between FromTime and ToTime) or 
((FromTime > ToTime) and @time not between ToTime and FromTime) -- here swapped the totime and fromtime. 
) 
+0

Guter Fang in der Reihenfolge der Operanden. –

0

Die Grundidee ist:

where ((FromTime < ToTime) and cast(getdate() as time) between FromTime and ToTime) or 
     (FromTime > ToTime and cast(getdate() as time) not between ToTime and EndTime) 
    ) 
+0

für Datensatz 2, das Beispiel versucht zu sagen, es gibt Kriterien zwischen 22.00 Uhr bis 7.59 Uhr am nächsten Tag – RAY

+0

Danke Gordon für die Lösung, Es funktioniert gut, wenn die Zeit zwischen 22.00 Uhr bis 07.59 Uhr ist. Aber wenn die aktuelle Zeit zwischen 08:00 Uhr und 21:59 Uhr liegt, werden beide Datensätze ausgewählt. Bitte helfen Sie mir Gordon –

0

Sie etwas in dieser Richtung versuchen:

select * from xyz where 
dateadd (hour, datepart(hour, getdate()), '2000-01-01') between 
dateadd (hour, left(fromtime,2), '2000-01-01') and 
dateadd (hour, case when left(totime,2) < left(fromtime,2) then left(totime,2)+24 else left(totime,2) end, '2000-01-01') 
+0

Ray, ich werde Ihre Lösung versuchen und Sie Ergebnisse wissen lassen. Danke im Voraus. –

+0

versuchte Lösung von Ihnen gegeben. Es gibt Syntaxfehler in der Nähe von '24 else left (totime, 2), '2000-01-01') für Komma, ich kann es nicht korrigieren. Bitte helfen Sie in diesem Fall –

+0

Da Ihr Zeitbereich wahrscheinlich das nächste Datum am Morgen beinhalten wird, ist das Problem daher, die Zeit vor dem Datum und die Zeit am nächsten Tag zu vergleichen, und meine vorgeschlagene Lösung besteht darin, Ihren Zeitwert in ein virtuelles zu komponieren Datum. Damit kann die Bedingung als Datumsbereich verglichen werden – RAY

Verwandte Themen