来自时间戳小时和分钟的Exasol Extrackt

时间:2017-03-11 12:07:47

标签: sql timestamp intervals between exasolution

我有一个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)中解决这个问题吗?

2 个答案:

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