我正在努力让以下查询正常工作:
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。
我确信这很简单,我在研究中没有运气。
谢谢。
答案 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'