找到两个不同时间范围之间的时间

时间:2016-02-01 20:46:26

标签: sql teradata

我正在努力让以下查询正常工作:

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 个答案:

答案 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'
            )

您需要使用括号来包含要与其他时间范围配对的OR范围。

请注意。如果该时间列的精度比第二列之间的精度更精细将导致不准确,我总是建议使用> =以及<比如这个

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

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