【发布时间】:2019-02-09 17:37:00
【问题描述】:
我在一个超级简单的查询中使用 prestoDB SQL 日期逻辑有点挣扎,想知道是否有人可以提供解决方案?
我有一些以这种格式存储为 varchar 的日期
20180901
20180902
20180903
20180904
20180905
20180906
etc
我将这些存储在“lastseen”中
我想要一个可以说的查询
select * from abc where lastseen = (lastseen - 1 day)
所以结果将是例如:
20180902 = 20180901
或
20180901 = 20180831
等等。
似乎无法解决,所以欢迎任何解决方案或指点。
【问题讨论】:
-
您可以使用
date_parse()将字符串转换为日期(通过互联网搜索引擎找到)。只要您对这些字符串的格式是保证感到满意。至于你想要的规则,嗯,20180902never equals20180901,所以我不确定你想要什么......我建议显示从您显示的示例输入中获得您想要的示例输出。 -
谢谢垫。我的意思是,对于一个给定的日期字符串 20180902 和 1 天,结果将是字符串 20180901。所以在这种情况下,假设我想今天运行查询(20180904),我会get: select * from abc where lastseen = (lastseen - 1 day) 将导致从 abc 返回 lastseen 为 20180903 的所有记录。
-
那么,你想要的伪sql是
SELECT lastseen, date_parse(lastseen) - interval 1 day FROM abc? prestodb.io/docs/current/functions/datetime.html -
SQL 是:select * from abc where "p"."lastseen" = date_parse("p"."lastseen") - 间隔 1 天
-
但这绝不是真的。这就像留在
WHERE 2-1=2