【问题标题】:(simple) SQL query for date conversion in presto SQL(简单)presto SQL中日期转换的SQL查询
【发布时间】: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() 将字符串转换为日期(通过互联网搜索引擎找到)。只要您对这些字符串的格式是保证感到满意。至于你想要的规则,嗯,20180902 never equals 20180901,所以我不确定你想要什么......我建议显示从您显示的示例输入中获得您想要的示例输出。
  • 谢谢垫。我的意思是,对于一个给定的日期字符串 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 abcprestodb.io/docs/current/functions/datetime.html
  • SQL 是:select * from abc where "p"."lastseen" = date_parse("p"."lastseen") - 间隔 1 天
  • 但这绝不是真的。这就像留在WHERE 2-1=2

标签: sql presto


【解决方案1】:

我相信这样的事情会奏效。

cast(lastseen AS date) = cast(lastseen as date) - interval '1' day 

当然,这只有在整个表中都有良好的数据时才有效。如果将Query 放入WHERE 子句中,它还会导致Query 始终不返回任何内容。

您能否更具体地说明您要完成的工作。

【讨论】:

  • 但是一个日期怎么可能等于它自己减去 1 呢?
  • 不能。除非数据发生了一些奇怪的事情。这就是为什么我说把它放在WHERE 子句中不会有任何回报,并要求原始发帖人澄清他们的意图。
猜你喜欢
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 2017-02-14
  • 2019-11-01
  • 1970-01-01
相关资源
最近更新 更多