雅典娜大于日期列中的条件

Posted

技术标签:

【中文标题】雅典娜大于日期列中的条件【英文标题】: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 无法处理日期列上的大于运算符?

谢谢!

【问题讨论】:

【参考方案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

【讨论】:

以上是关于雅典娜大于日期列中的条件的主要内容,如果未能解决你的问题,请参考以下文章

在另一列满足条件后计算一列中的值

Python pandas计算时间,直到列中的值大于当前期间

根据单个列中的多个条件选择多个列

如何在 php 中使用日期条件获取数据

创建一个新列,它是满足两个条件的多个其他列中的日期数之和

在雅典娜中将 yyyymm 字符串转换为 yyyy-mm-dd hh:mm:ss 日期时间