从时间戳记小时和分钟中提取的 Exasol
Exasol Extrackt from Timestamp Hours AND Minutes
我有一个 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) 中解决这个问题有什么想法吗?
我找到了解决方法。解决方案是交错 SQL 个状态。因此,在第一步中,您 select 小时数,然后围绕 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;
您可以简单地将时间戳的时间部分转换为字符串并在两者之间执行操作,例如:
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 是因为你有大量的数据并且你想要快速的性能,我的建议是在你的 table 中有一个额外的列,你将 entryTime
的时间部分存储为一个数值,这将创建一个适当的索引给你更好的性能。
我有一个 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) 中解决这个问题有什么想法吗?
我找到了解决方法。解决方案是交错 SQL 个状态。因此,在第一步中,您 select 小时数,然后围绕 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;
您可以简单地将时间戳的时间部分转换为字符串并在两者之间执行操作,例如:
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 是因为你有大量的数据并且你想要快速的性能,我的建议是在你的 table 中有一个额外的列,你将 entryTime
的时间部分存储为一个数值,这将创建一个适当的索引给你更好的性能。