Presto SQL / Athena:select 不同日期之间的时间

Presto SQL / Athena: select between times across different days

我有一个包含一系列事件及其时间戳的数据库。

我发现自己需要 select 所有发生在 11:00 和 11:10 以及 21:00 和 21:05 之间的所有事件。

所以我要做的是从时间戳中提取小时和分钟,然后:

SELECT *
 WHERE (hour = 11 AND minute <= 10)
    OR (hour = 21 AND minute <= 05)

但是,我想知道是否有更简单/更简洁的方法来执行此操作,例如当您在日期之间查询时:

SELECT *
 WHERE date BETWEEN '2020-07-01' AND '2020-07-05'

我读到 here 这在 SQLite 中是可行的,我想知道是否也可以在 presto 中完成。我查看了文档,但找不到执行 time() 在 SQLite 中执行的操作的模拟函数。

您可以使用日期格式化函数,例如date_format,然后是字符串比较:

select *
from mytable
where 
       date_format(mydate, '%H:%i') between '11:00' and '11:09'
    or date_format(mydate, '%H:%i') between '21:00' and '21:04'
    

请注意,我从上限减去了一分钟,因为我假设您不想包括最后一分钟。 between '11:00' and '11:09' 为您提供从 11:00:0011:09:59 的所有内容。