【问题标题】:Exasol Extrackt from Timestamp Hours AND Minutes时间戳小时和分钟的 Exasol 提取物
【发布时间】:2017-08-01 18:41:38
【问题描述】:

我有一个 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 timestamp intervals between exasolution


    【解决方案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 都会为WHERE 子句的第一部分创建一个expression index。因为,我想,您使用 EXASOL 是因为您拥有大量数据并且想要快速的性能,我的建议是在您的表中增加一个列,将entryTime 的时间部分存储为数值,这将创建一个合适的索引会给你更好的性能。

    【讨论】:

    • 谢谢!第一个版本非常流畅!看来我还是缺乏很多sql经验
    • 欢迎您并记住永不放弃,永不投降 :)
    【解决方案2】:

    我找到了解决方法。解决方案是交错 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多