2016-02-01 40 views
1

我刚刚接到下面的查询才能正常工作挣扎:但是找到2个不同时间之间的时间为

select date, time, amt, tran_id 
from trans 
where amt > 0 
     and time between'23:00:00' and '23:59:59' 
     or time between '00:00:00' and '5:59:59' 

我试图找到通宵交易日,“或”语句抛出关闭我的其他'和'声明和查询返回记录,其中amt = 0.

我确信这很简单,我只是没有在我的研究中运气。

谢谢。

回答

2
where amt > 0 
    and (
      time between'23:00:00' and '23:59:59' 
    or time between '00:00:00' and '5:59:59' 
      ) 

你需要括号包含或范围要与其他时间段只配对。

注意。如果在这段时间列具有精确细于之间第二使用会引起不准确,我总是建议使用> =连同<如本

where amt > 0 
    and (
      time >= '23:00:00' 
    or (time >= '00:00:00' and time < '6:00:00')' 
      ) 
+0

完美。谢谢! – DJDJ23

2

附加到加括号:假设time具有TIME数据类型这可以是简化为

select date, time, amt, tran_id 
from trans 
where amt > 0 
     and (time >= '23:00:00' or time <= '5:59:59') 

where amt > 0 
     and time not between '06:00:00' and '22:59:59' 

顺便说一句,一个字面的时间应该始终写入TIME '23:00:00'

+0

它有一个整数的数据类型,我的猜测是因为大量的trans数据,会让查询更快? – DJDJ23

+1

之前有一个'TIME' /'TIMESTAMP'数据类型(几十年前)时间被存储为'FLOAT'和一个特定的'FORMAT',使它看起来像一个实际的时间。当它在您的站点存储为“INT”时,可能由于历史原因或节省一点空间(4对6字节)。 – dnoeth

+0

这很有道理。谢谢!! – DJDJ23

相关问题