【问题标题】:Athena greater than condition in date column雅典娜大于日期列中的条件
【发布时间】:2018-12-18 13:49:55
【问题描述】:

我尝试在 Athena 上运行以下查询。

SELECT observation_date, COUNT(*) AS count
FROM db.table_name
WHERE observation_date > '2017-12-31'
GROUP BY observation_date

但是它产生了这个错误:

SYNTAX_ERROR: line 3:24: '>' cannot be applied to date, varchar(10)

这对我来说似乎很奇怪。我的查询中有错误还是 Athena 无法处理日期列上的大于运算符?

谢谢!

【问题讨论】:

    标签: sql amazon-web-services amazon-athena presto


    【解决方案1】:

    在进行此比较之前,您需要使用强制转换来正确格式化日期。请尝试以下操作:

    SELECT observation_date, COUNT(*) AS count
    FROM db.table_name
    WHERE observation_date > CAST('2017-12-31' AS DATE)
    GROUP BY observation_date
    

    在 Fiddler 中查看:SQL Fidle

    2019 年 7 月 17 日更新

    为了体现cmets

    SELECT observation_date, COUNT(*) AS count
    FROM db.table_name
    WHERE observation_date > DATE('2017-12-31')
    GROUP BY observation_date
    

    【讨论】:

    • 感谢您的回复,但这并不能解决问题。该列已经是一个日期类,我预计这是 Amazon Athena 数据库特有的问题。我可以看到您的链接小提琴设置为 MS SQL Server,这是一种不同风格的 SQL,您的答案将是一个有效的解决方案。
    • @efbbrown 您引用的错误是语法错误。我怀疑这是雅典娜的问题。基本上,您正在评估的两个方面的格式不同。如果没有有关您的表的特定信息(创建语句会有所帮助),我猜您的日期列已格式化为时间戳。如果您确定日期格式正确,则需要将评估右侧的格式设置为日期。
    • 谢谢巴里,你完全正确。迄今为止,我需要对我的评估进行 RHS。 WHERE observation_date > CAST('2017-12-31' AS DATE).
    • 很高兴我能帮上忙。更新了答案以反映这一点。
    • 我会使用 DATE 文字而不是 CAST:DATE '2017-12-31',就像在 WHERE observation_date > DATE '2017-12-31' 中一样。
    【解决方案2】:

    您还可以使用date 函数,它是CAST(x AS date) 的方便别名:

    SELECT * 
    FROM date_data
    WHERE trading_date >= DATE('2018-07-06');
    

    【讨论】:

      【解决方案3】:
      select * from my_schema.my_table_name where date_column = cast('2017-03-29' as DATE) limit 5
      

      【讨论】:

        猜你喜欢
        • 2021-01-29
        • 1970-01-01
        • 1970-01-01
        • 2019-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-19
        • 1970-01-01
        相关资源
        最近更新 更多