【问题标题】:Convert an MySQL script to Presto involving DATE_FORMAT将 MySQL 脚本转换为涉及 DATE_FORMAT 的 Presto
【发布时间】:2021-05-16 08:29:21
【问题描述】:

我正在尝试转换此 MySQL 行:

if(DATE_FORMAT(y.first_endperiod,"%Y-%m-%d") = DATE_FORMAT(x.end_period,"%Y-%m-%d"), 1, 0) = 1

到 PrestoDB。我试过使用date_formatdate_parseto_char,它们都返回以下错误:

An error has been thrown from the AWS Athena client. SYNTAX_ERROR: line 40:41: Column '%y-%m-%d' cannot be resolved.

我正在使用 Athena 从 S3 存储桶中查询数据。知道如何解决这个问题吗?

【问题讨论】:

  • if cast(date_parse(y.first_endperiod, '%Y-%m-%d') as date) = cast(date_parse(x.end_period, '%Y-%m-%d') as date) 呢?
  • 没关系,已经解决了。我把双撇号改成了单撇号,一切都好。

标签: mysql date-format presto trino


【解决方案1】:

看起来您正在按日期部分比较日期/时间,所以您应该可以这样做:

CAST(y.first_endperiod AS date) = CAST(x.end_period AS date)

【讨论】:

    【解决方案2】:

    在标准 SQL 中,双引号用于分隔标识符,例如列名。因此,您上面的 SQL 查询被解释为好像您有一个名为 %Y-%m-%d 的列。这不太可能,但从技术上讲,它是 SQL 中的合法标识符。

    你可能已经习惯了 MySQL,默认情况下,双引号与单引号相同,用于分隔字符串文字。这是 MySQL 的非标准特性。

    切换到字符串文字周围的单引号,它应该可以解决您的问题:

    if(DATE_FORMAT(y.first_endperiod,'%Y-%m-%d') = DATE_FORMAT(x.end_period,'%Y-%m-%d'), 1, 0) = 1
    

    另见Do different databases use different name quote?

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 2021-11-03
      • 1970-01-01
      • 2012-07-21
      • 2013-08-10
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多