SQL检查范围之间的时间值

时间:2016-09-18 03:07:57

标签: sql sql-server

我正在尝试编写一个查询,检查变量是否在数据库中不同列的时间范围之间。如果是,那么我想返回该行。

当我使用以下内容时,我得到以下结果

   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变量已经改为8am,我们以前可以看到那里有数据。

enter image description here

4 个答案:

答案 0 :(得分:1)

尝试在条件如下的情况下使用变量:

WHERE @mytime BETWEEN  tstart  AND tend 

仅针对时间和分钟,它应该工作,请尝试:

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

答案 1 :(得分: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)

答案 2 :(得分:0)

如下更改您的状况。在您的情况下,第二个条件将不满足数据范围(趋势> @mytime)

       WHERE  tstart >@mytime and @mytime <tend

答案 3 :(得分:0)

当你想表达BETWEEN时,它的开始时间&lt; yourtime&lt;时间结束。它等于

startTime > yourTime and yourTime > endTime

当你以相反的方式写声明时

tstart < @mytime AND @mytime < tend

所以将where子句更改为

BETWEEN

您可以使用BETWEEN运算符,但请注意Fatal Exception运算符包含两个范围。看它是否满足您的要求。