1

我有一个 Exasol 数据库,其登录值的数据类型为 TIMESTAMP,例如:

2015-10-01 13:00:34.0
2015-11-02 13:10:10.0
2015-10-06 13:20:03.0
2016-02-01 14:15:34.0
2016-04-03 14:08:10.0
2016-07-01 11:05:07.0
2016-09-03 10:08:12.0
2016-11-15 09:03:30.0

还有更多。我想做一个 SQL (SQLite) 查询,我得到像从 09:00:00 到 09:15:00 登录和从 09:15:00 到 09:30:00 登录等等在单独的表中(不管现在是什么日期)。我已经成功地选择了 1 小时间隔:

...EXTRACT(HOUR FROM entryTime ) BETWEEN 8 and 8

这样我可以在 1 小时内获得我的数据库条目(无论是什么日期),但我需要更小的间隔,比如每 09:00:00 - 09:15:00 分钟。任何想法如何在 Exasol (SQLite) 中解决这个问题?

4

2 回答 2

1

您可以简单地将时间戳的时间部分转换为字符串并在两者之间进行操作,例如:

WHERE to_char(entryTime, 'hhmi') BETWEEN '0900' AND '0915'

如果您想使用提取值和数值,我建议这样做:

WHERE (EXTRACT(HOUR FROM entryTime) * 100) + EXTRACT(MINUTE FROM entryTime) 
      BETWEEN 900 and 915

我现在不在我的电脑前,但这(或类似的东西)应该可以工作。

但我怀疑在这两种情况下,EXASOL 都会expression index为条款的第一部分创建一个WHERE。因为,我猜,您使用 EXASOL 是因为您拥有大量数据并且想要快速的性能,所以我的建议是在您的表中增加一个列,将时间部分存储entryTime为数值,这将创建一个适当的索引给你更好的表现。

于 2017-03-12T14:28:20.340 回答
0

我找到了解决方法。解决方案是交错 SQL 状态。因此,在第一步中,您选择小时,然后围绕该 SELECT 状态,包装另一个,在其中指定分钟。

SELECT * FROM 
       (SELECT * FROM MY_SCHEMA.EXA_LOCAL WHERE EXTRACT(HOUR FROM TIMESTMP) BETWEEN 9 and 9) 
       where EXTRACT(MINUTE FROM TIMESTMP) BETWEEN 0 and 15;
于 2017-03-12T13:43:47.880 回答