在presto SQL中将int格式化为日期

d3w*_*abe 4 sql presto

我有一个整数日期列“date_created”存储值,如...

20180527, 20191205, 20200208
Run Code Online (Sandbox Code Playgroud)

我想知道解析为日期的最佳方法是什么,这样我就可以在查询中做这样的事情......

select * from table where formatted(date_created) > formatted(date_created) - 90
Run Code Online (Sandbox Code Playgroud)

(退回过去 90 天内的所有物品)

我发现了一些类似的例子,它们从表示秒或毫秒的日期整数转换,但没有一个列本质上是存储为整数的日期字符串。

感谢有关实现此目标的最佳方法的任何想法

Pio*_*sen 6

我想知道解析为日期的最佳方法是什么,这样我就可以在查询中做这样的事情......

您可以使用以下方法转换“日期为数字”(例如201805272018 年 5 月 27 日):

  1. 强制转换为 varchar
  2. parse_datetime 以适当的格式
  3. 投射至今(因为parse_datetime返回 a timestamp

例子:

presto> SELECT CAST(parse_datetime(CAST(20180527 AS varchar), 'yyyyMMdd') AS date);
   _col0
------------
 2018-05-27
Run Code Online (Sandbox Code Playgroud)

但是,这不一定是查询数据的最佳方式。通过使搜索条件适应数据格式(反之亦然),您可能会受益于谓词下推和分区修剪。有关如何执行此操作的信息,请参阅 @GordonLinoff 答案。


Der*_*ğlu 1

下面的查询对于任何数据库都是索引友好的,因为它不使用索引列上的函数

select * from table where date_created > timestamp (formatted(date) - 90)
Run Code Online (Sandbox Code Playgroud)