SQL查询在某些情况下无法使用某些时间

时间:2018-08-24 18:37:24

标签: sql time db2 toad

我有一个在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中执行所有这些查询。

1 个答案:

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

问题(如您可能已经注意到的)是发生在午夜边界上的班次。第二个条件可以解决这个问题。