2016-09-18 57 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运营商包括范围。看看它是否满足您的要求。