2016-09-18 54 views
0

我想寫一個查詢,它檢查變量是否在數據庫的不同列中的時間範圍之間。如果是,那麼我想返回該行。範圍之間的SQL檢查時間值

當我使用下面我得到以下結果

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

然而,當我更改查詢檢查的變量@mytime是否在時間範圍之間,我沒有得到任何結果。 @mytime變量已被更改爲上午8點,我們以前可以看到那裏有數據。

enter image description here

+0

請不要張貼**圖片!! **。以文本格式發佈原始代碼/結果將很容易複製粘貼並複製問題或測試 –

+0

是否需要包含秒的比較日期? –

+0

嗨prdp,我只是想檢查,如果myDate變量是由數據庫中的tstart和趨勢列創建的日期範圍 – GlenCloncurry

回答

1

嘗試通過在條件使用可變如下:

WHERE @mytime BETWEEN tstart AND tend 

以及解決小時,只分鍾,它應該工作,請嘗試:

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

使用以下從您的datetime列中刪除秒的代碼

Select DATEADD(MINUTE, DATEDIFF(MINUTE, 0, yourcolumn), 0) 

這樣的事情應該可以幫助您

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

改變你的條件如下圖所示。你的情況如果你想表達之間的第二個條件將不能滿足(往往> @mytime)數據範圍

 WHERE tstart >@mytime and @mytime <tend 
0

,它的開始時間< yourtime <結束時間。當你寫在相反的方式聲明,等於

startTime < yourTime AND yourTime < endTime 

startTime > yourTime and yourTime > endTime 

因此改變where子句

tstart < @mytime AND @mytime < tend 

您可以使用BETWEEN操作,但請注意BETWEEN運營商包括範圍。看看它是否滿足您的要求。