【问题标题】:Changing dd/mm/yyyy/ hh/mm/ss format to yyyymm in Hive在 Hive 中将 dd/mm/yyyy/hh/mm/ss 格式更改为 yyyymm
【发布时间】:2019-05-24 18:44:17
【问题描述】:

我目前正在使用 Hive。我有一列(A 列)字符串,格式如下11/9/2009 0:00:00。我想提取yyyymm。即我希望上面的字符串是200909。我尝试了两种不同的方法,但都没有奏效。

我尝试使用两种不同的方法转换字符串

       concat(year(Column A),lpad(month(Column A),2,0))


       convert(datetime, Column A)

对于我收到的第一行代码:所有行都为 NULL

对于我收到的第二个:

遇到:预期的 DATETIME:ALL、CASE、CAST、DEFAULT、DISTINCT、 EXISTS、FALSE、IF、INTERVAL、NOT、NULL、REPLACE、TRUNCATE、TRUE、 导致的标识符:异常:语法错误

【问题讨论】:

    标签: date hive timestamp hiveql impala


    【解决方案1】:

    使用unix_timestamp(string date, string pattern)given date format 转换为从1970-01-01 过去的秒数。然后使用 from_unixtime() 转换为required format

    select  from_unixtime(unix_timestamp( '11/9/2009 0:00:00','dd/MM/yyyy HH:mm:ss'), 'yyyyMM');
    

    结果:

    200909
    

    另请阅读:Impala data and time functionsHive date functions

    另一种解决方案,适用于 Hive:

    select  concat(regexp_extract('11/9/2009 0:00:00','(\\d{1,2})/(\\d{1,2})/(\\d{4})',3),lpad(regexp_extract('11/9/2009 0:00:00','(\\d{1,2})/(\\d{1,2})/(\\d{4})',2),2,0))
    

    【讨论】:

    • 因为它是一个字符串而不是一个日期时间戳,所以上面的内容是行不通的。
    • @Yags 我无法查看 Impala。这绝对适用于 Hive
    • @leftjoin '11/9/2009 0:00:00','dd/MM/yyyy HH:mm:ss' 这是我数据集中的一个字符串。因此结果为空。在你的哪里是日期时间
    • 第二个工作正常。此外,我的以下解决方案产生相同的输出。谢谢@leftjoin
    【解决方案2】:

    由于我试图将字符串转换为 YYYYMM,因此我必须使用以下对我有用的方法:

          'concat(substr(Column A, instr(Column A, ' ')-4, 4),substr(Column A, instr(Column A, ' /')+1, 2))' 
    

    【讨论】:

      猜你喜欢
      • 2019-02-17
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      • 2018-11-08
      • 2013-07-22
      • 2023-03-04
      • 1970-01-01
      • 2021-10-13
      相关资源
      最近更新 更多