我有一个带有数据类型时间戳的登录值的exasol数据库,例如:
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)中解决这个问题?
您可以简单地将时间戳的时间部分转换为字符串,然后在之间进行A之间的操作,例如:
WHERE to_char(entryTime, 'hhmi') BETWEEN '0900' AND '0915'
如果要使用提取物和数值,我建议这样做:
WHERE (EXTRACT(HOUR FROM entryTime) * 100) + EXTRACT(MINUTE FROM entryTime)
BETWEEN 900 and 915
我现在不在计算机前面,但这(或类似的东西)应该起作用。
,但我怀疑在两种情况下,Exasol都会为WHERE
子句的第一部分创建expression index
。因为,我想,您使用exasol是因为您有大量数据并且需要快速性能,所以我的建议是在表中有一个额外的列,其中将entryTime
的时间部分存储为数字值,这将创建一个适当的索引可以为您提供更好的性能。
我找到了解决方法。解决方案是交流SQL状态。因此,在第一步中,您选择了小时,在该选择状态周围,您可以将另一个包裹在指定分钟的位置。
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;