2016-09-18 3 views
0

Ich versuche, eine Abfrage zu schreiben, die überprüft, ob eine Variable zwischen einem Zeitbereich in separaten Spalten in der Datenbank ist. Wenn ja, möchte ich die Zeile zurückgeben.SQL Check-Zeit Wert zwischen einem Bereich

Wenn ich die folgenden verwenden, erhalte ich folgendes Ergebnis

declare @mytime datetime = '20160917 07:56' 
select * 
from OEEEvent oe 
inner join RSBizWare.dbo.OEEConfigEvent ce on oe.lOEEConfigEventId = ce.lOEEConfigEventId 
inner join RSBizWare.dbo.OEELOVCodeVal rs on oe.sStartVal = rs.sDescription and ce.lOEEIntRSSqlId=rs.lOEELOVCodeId 
inner join RSBizWare.dbo.OEEStateConfig mms on rs.lMachineState = mms.lOEEStateConfigId 

where tstart > @mytime 

enter image description here

Allerdings, wenn ich die Abfrage ändern zwischen dem Zeitbereich zu überprüfen, ob die Variable @mytime, ich kein Ergebnis erhalten . Die Variable @mytime wurde auf 8 Uhr morgens geändert, wo wir vorher sehen konnten, dass dort Daten waren.

enter image description here

+0

Bitte keine ** Bilder !! **. Veröffentlichen Sie den ursprünglichen Code/Ergebnis im Textformat wird es einfach zu kopieren einfügen und replizieren das Problem oder zu testen –

+0

Möchten Sie Datum einschließlich Sekunden vergleichen? –

+0

Hallo prdp, ich möchte nur überprüfen, ob die myDate-Variable zwischen dem Datumsbereich von der tstart und tenden Spalte in der Datenbank – GlenCloncurry

Antwort

1

Versuchen durch Variable in dem Zustand verwendet, wie folgend:

WHERE @mytime BETWEEN tstart AND tend 

Und für die Adressierung nur Stunde und Minute, sollte es funktionieren bitte versuchen Sie es:

WHERE LEFT(@mytime, 17) BETWEEN LEFT(tstart, 17) AND LEFT(tend, 17) 
0

Verwenden unten Code, um Sekunden von Ihrer datetime Spalte

zu trimmen

so etwas wie dieses sollten Sie wie unten

declare @mytime datetime = '20160917 07:56' 

Select .. 
where @mytime between DATEADD(MINUTE, DATEDIFF(MINUTE, 0, tstart), 0) and 
              DATEADD(MINUTE, DATEDIFF(MINUTE, 0, tEnd), 0) 
0

ändern Zustand helfen. In Ihrem Fall wird nicht die zweite Bedingung den Datenbereich erfüllen (neigen> @mytime)

 WHERE tstart >@mytime and @mytime <tend 
0

Wenn Sie zwischen ausdrücken wollen, es ist Startzeit < Yourtime < endtime. Es ist gleich zu

startTime < yourTime AND yourTime < endTime 

während Sie Anweisung in entgegengesetzter Weise

startTime > yourTime and yourTime > endTime 

So schreiben ändern, wo Klausel

tstart < @mytime AND @mytime < tend 

Sie BETWEEN Operator verwenden, aber beachten Sie bitte BETWEEN Betreiber sowohl Bereich umfassen . Sehen Sie, ob es Ihre Anforderung erfüllt.

Verwandte Themen