date - 在 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 导致:异常:语法错误
解决方案
用于将给定的日期格式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))
推荐阅读
- java - 我的程序将运行多少次而不运行它
- java - Eclipse 插件 o3smeasures 不工作
- python - Pyspark:动态重新排列 pyspark 嵌套模式
- python - 从嵌套的 JSON API 输出创建数据框
- boost - Boost asio:包括
导致套接字始终输出 0 个字节 - javascript - 如何在 chrome 浏览器上使用 vs 代码在 webpack 上进行调试?
- java - Mongodb Groupby 不使用嵌套字段
- php - 从聊天类内部访问 Ratchet 循环
- express - Express 服务器上的错误 [ERR_HTTP_HEADERS_SENT]
- python - 在 Basemap 上绘制 netCDF4 数据