我有一个在DB2中创建的表。该表具有4个字段ID(整数),Shift(整数),Start_time(时间)和End_time(时间)。该表中的数据看起来像this。当我运行此select * from shifttimes where '6:29:59' between start_time and End_time
SQL查询时,它返回“ 1”作为班次编号。从5AM到1:29 PM之间的任何时间,它返回“ 1”作为班次号,这很好。
当我运行此select * from shifttimes where '20:29:59' between start_time and End_time
sql查询时,它返回“ 2”作为班次号。在1:30 PM到8:29:59 PM之间的任何时间,它都会将班次编号返回“ 2”,这也很好。
问题是当我运行此select * from shifttimes where '20:30:00' between start_time and End_time
sql查询时,它什么也不返回。
从20:30:00到4:59:00的任何时间,查询均不返回任何内容。
我正在TOAD for DB2中执行所有这些查询。
答案 0 :(得分:0)
您想要的逻辑是:
select *
from shifttimes
where (start_time < end_time and '20:29:59' between start_time and End_time) or
(start_time > end_time and '20:29:59 not between end_time and start_time)
问题(如您可能已经注意到的)是发生在午夜边界上的班次。第二个条件可以解决这个问题。