雅典娜大于日期列中的条件
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
【讨论】:
以上是关于雅典娜大于日期列中的条件的主要内容,如果未能解决你的问题,请参考以下文章