【问题标题】:How to get a datetime in a format from hive query?如何从配置单元查询中获取格式的日期时间?
【发布时间】:2020-08-28 19:34:40
【问题描述】:
hql="
  select DISTINCT b.mid, from_unixtime(b.create_time,'yyyy-MM-dd hh.mm.ss'), to_id from
      (select mid, create_time, to_id, dt from mark_table where dt>=$dt1 and dt<=$dt2 and to_id = 'Category_001' ) b
   
  "

我上面有一个hive查询,'b.create_time'是一个带日期的列,但是这个列的默认时间格式是这样的:

1594553700

我认为它是以秒为单位的时间?我希望用这个来转换它:

from_unixtime(b.create_time,'yyyy-MM-dd hh.mm.ss')

但它给出了一个错误,说 b.create_time 不能是该函数工作的字符串。

如何处理?

【问题讨论】:

    标签: sql string datetime hive


    【解决方案1】:

    1594553700 看起来确实像 Unix 时间戳(自 1970 年 1 月 1 日以来的秒数):它对应于 2020 年 7 月 12 日星期日上午 11:35:00。

    from_unixtime() 是将其转换为格式化日期字符串的正确函数。但是您似乎将此时间戳存储为字符串(这绝对不是一个好主意),而 the function wants a number as argument.

    只需显式转换为正确的数据类型:

    from_unixtime(cast(b.create_time as bigint),'yyyy-MM-dd hh.mm.ss')
    

    【讨论】:

    • 'yyyy-MM-dd hh.mm.ss' 不返回 24 小时格式。如何指定 24 小时制?
    • @marlon:你的问题没有提到。我想您可以使用HH 而不是hh...这就是您不接受答案的原因吗?
    • 你的回答很好,我只想知道如何获取 24 小时制。我正在测试 HH.mm.ss 格式。我会接受的。
    • 它似乎工作。我应该也使用 HH.MM.SS,还是只使用 HH.mm.ss?
    猜你喜欢
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多