将配置单元中的dd/mm/yyy/hh/mm/ss格式更改为yyyymm

5kgi1eie  于 2021-06-24  发布在  Hive
关注(0)|答案(2)|浏览(379)

我正在用Hive。我有一列字符串,格式如下 11/9/2009 0:00:00 . 我想提取 yyyymm . i、 我希望上面的字符串是 200909 . 我试过两种不同的方法,都不管用。
我尝试用两种不同的方法转换字符串

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

       convert(datetime, Column A)

对于我接收的第一行代码:所有行中为空
我收到的第二封信是:
遇到:datetime应为:all、case、cast、default、distinct、exists、false、if、interval、not、null、replace、truncate、true、标识符引起的:异常:语法错误

r7s23pms

r7s23pms1#

使用 unix_timestamp(string date, string pattern) 将给定的日期格式转换为从1970-01-01经过的秒数。然后使用from\u 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))
qrjkbowd

qrjkbowd2#

因为我想把字符串转换成yyyymm,所以我必须使用下面对我有用的代码:

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

相关问题