我正在尝试编写一个查询,检查变量是否在数据库中不同列的时间范围之间。如果是,那么我想返回该行。
当我使用以下内容时,我得到以下结果
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
但是,当我更改查询以检查变量@mytime是否在时间范围之间时,我得不到任何结果。 @mytime变量已经改为8am,我们以前可以看到那里有数据。
答案 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
运算符包含两个范围。看它是否满足您的要求。