在约会期间如何避免负数

时间:2014-05-06 13:13:22

标签: sql-server sql-server-2008 tsql

有时间的表如:15:30,要在15分钟的时间间隔内从表中选择数据但是只有可能,我试试:

select id from myTbl
where type = 2 and DATEDIFF(mi,my_time,LEFT(CAST(GETDATE() as time),5)) <= 15

例如,如果my_time = 15:55并且LEFT(CAST(GETDATE() as time),5)) = 16:45作为回应我有-50且它的&lt; = 15但我只需要比较可能性,当我尝试ABS时它不帮助我,因为当响应的时间是-14 ABS取+ 14且<&lt; = 15。所以我有28分钟的间隔(-14和14)。是否可以避免所有负数?并且仅在可能的情况下进行比较

2 个答案:

答案 0 :(得分:4)

select id 
from myTbl
where type = 2 
      and DATEDIFF(mi,my_time,LEFT(CAST(GETDATE() as time),5)) <= 15 
      and DATEDIFF(mi,my_time,LEFT(CAST(GETDATE() as time),5)) >=0

答案 1 :(得分:4)

更好的方法就是......

SELECT id 
FROM myTbl
WHERE [TYPE] = 2 
AND my_time >= CAST(DATEADD(MINUTE, -15, GETDATE()) AS TIME)
AND my_time <= CAST(GETDATE() AS TIME)

避免在where子句的列上使用DATEDIFF和其他标量函数,因为它不允许查询优化器使用任何索引,即使有查询可以从中受益的索引,请阅读本文以获取更多信息{{ 3}}