Presto SQL / Athena:在不同日期的时间之间进行选择
Posted
技术标签:
【中文标题】Presto SQL / Athena:在不同日期的时间之间进行选择【英文标题】:Presto SQL / Athena: select between times across different days 【发布时间】:2020-11-07 12:23:24 【问题描述】:我有一个包含一系列事件及其时间戳的数据库。
我发现自己需要选择所有发生在 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 中一样的模拟函数。
【问题讨论】:
【参考方案1】:您可以使用日期格式化函数,例如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:00
到 11:09:59
的所有内容。
【讨论】:
如果mydate
是TIMESTAMP
,您也可以使用WHERE CAST(mydate AS TIME) BETWEEN TIME '11:00' AND TIME '11:09'
。这或多或少是一样的,但查询引擎的工作量可能会更少。以上是关于Presto SQL / Athena:在不同日期的时间之间进行选择的主要内容,如果未能解决你的问题,请参考以下文章
AWS Athena (Presto) - 如何将时间戳格式化为日期格式?
AWS Athena (Presto) DISTINCT SQL 查询中的重复结果?
根据 SQL 或 Presto Athena 中的某一行中的某个值过滤列