如何编写 SQL 语句在两个 dates/times 之间过滤,日期和时间在单独的列中

How to write a SQL statement which filters between two dates/times, with the date and time in separate columns

我有一个 Informix 数据库(除了执行 SELECT 语句外我无法控制它)它包含以下列:

Date | Time | Column1 | Column2 | Column3

日期是 date/time 格式,时间是整数(存储,例如上午 8 点为 800,下午 1 点为 1300)。其他列与此目的无关,但假设它们是我想要求和的整数。

对列 Column1、Column2 和 Column3 求和的最有效方法是什么?假设我想要 2019 年 8 月 1 日上午 10 点到 2019 年 8 月 5 日上午 11 点之间的行。

我的第一次尝试是:

SELECT Date, Time, SUM(Column1), SUM(Column2), SUM(Column3)
  FROM table
 WHERE (Date >= '08/01/19' AND Time >= 1000) AND (Date <= '08/05/19' AND Time < 1100);

但是考虑一下这意味着我同时要求某物大于等于 1000 且小于 1100。结果只返回了那些日子上午 10 点到 11 点之间的记录。

我的下一次尝试是:

SELECT Date, Time, SUM(Column1), SUM(Column2), SUM(Column3)
  FROM table
 WHERE ((Date = '08/01/19' AND Time >= 1000)
    OR (Date BETWEEN '08/02/19' AND '08/04/19')
    OR (Date = '08/05/19' AND Time < 1100));

这提供了我正在寻找的结果,但似乎效率不高 - 并且以编程方式构建可能很复杂。

如果这是最好的解决方案,我同意。只是希望有比我聪明的人来纠正我。

如果您将值存储在不同的列中,那么您似乎想要:

where (date > '2019-08-01' or
       date = '2019-08-01' and time > 1000
      ) and
      (date < '2019-08-05' or
       date = '2019-08-05' and time < 1100
      )

如果 date/time 值存储在单个列中,这会更简单。