如何使用Presto从varchar日期字段中提取日/月/年等?

时间:2019-11-08 19:29:46

标签: sql presto

我目前有带日期的表,将其设置为VARCHAR,格式为YYYY-MM-DD,例如:

2017-01-01

我正在使用的日期列称为“ event_dt”

我习惯于在Hive中使用day(event_dt), month(event_dt), year(event_dt)等,但是当查询失败时,Presto只是给了我error executing query而没有其他解释。

例如,我尝试过:

select
month(event_dt)
from
my_sql_table
where
event_dt = '2017-01-01'

我希望输出显示为:

01

但我得到的只是[Code: 0, SQL State: ] Error executing query

我尝试了Presto文档中列出的其他几种方法,但是一点都没有运气。我意识到这可能非常简单,但是任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

通过month()函数将varchar转换为date后,可以使用date()函数

presto> select month(date('2017-01-01'));
 _col0
-------
     1
(1 row)

答案 1 :(得分:1)

感谢@LukStorms在原始问题的评论中,我找到了两种解决方案:

  1. 使用月份(以cast(以event_dt作为日期)显示)
  2. 使用月份(日期(event_dt))