【问题标题】:How to extract day/month/year etc from varchar date field, using Presto?如何使用 Presto 从 varchar 日期字段中提取日/月/年等?
【发布时间】:2020-03-05 10:46:38
【问题描述】:

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

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 文档中列出的其他一些方法,但完全没有运气。我意识到这可能非常简单,但我们将不胜感激。

【问题讨论】:

  • 查看该帖子:stackoverflow.com/questions/39880540/…。您必须首先将您的 varchar 转换为日期类型。
  • where event_dt = date '2017-01-01' ?
  • @LukStorms 是的,我可以在 where 子句中使用它指定范围,以及诸如“介于 '2017-01-01' 和 '2017-03-03' 之间的范围”,但我'我也在寻找方法让我的输出给出一个包含年/月/日等的列
  • 哦,那个日期列实际上是一个 varchar。这样的事情会出错吗? select month(cast('2019-10-15' as date))
  • @LukStorms 是的!谢谢,那行得通。你能指出我曾经找到的特定文档吗?

标签: sql presto


【解决方案1】:

您可以在使用date() 函数将varchar 转换为date 后使用month() 函数:

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

【讨论】:

    【解决方案2】:

    感谢 @LukStorms 在 cmets 对原始问题的解答,我找到了两个解决方案:

    1. 使用月份(cast(event_dt as date))
    2. 使用月份(date(event_dt))

    【讨论】:

      猜你喜欢
      • 2016-07-27
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 2017-10-28
      • 2016-08-20
      • 1970-01-01
      相关资源
      最近更新 更多