首页 > 解决方案 > 在 Hive 中将 dd/mm/yyyy/hh/mm/ss 格式更改为 yyyymm

问题描述

我目前正在使用 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

对于我收到的第二个:

遇到:预期的日期时间:ALL、CASE、CAST、DEFAULT、DISTINCT、EXISTS、FALSE、IF、INTERVAL、NOT、NULL、REPLACE、TRUNCATE、TRUE、IDENTIFIER 导致:异常:语法错误

标签: datehivetimestamphiveqlimpala

解决方案


用于将给定的日期格式unix_timestamp(string date, string pattern)转换为从 1970-01-01 过去的秒数。然后使用 from_unixtime() 转换为所需的格式

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

结果:

200909

另请阅读:Impala 数据和时间函数以及Hive 日期函数

另一种解决方案,适用于 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))

推荐阅读