我有一个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)中解决这个问题吗?
答案 0 :(得分: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
的时间部分存储为数值,这将创建一个合适的索引,为您提供更好的性能。
答案 1 :(得分: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;