您正在尝试将01-Jan-2019 转换为时间戳,但即使它有效,Hive 中的时间戳也不是必需的格式:dd-MM-yyyy。时间戳的格式为:'yyyy-MM-dd HH:mm:ss.SSSSSSSSS'(纳秒是可选的)。
unix_timestamp 函数将给定格式字符串转换为以秒为单位的 unix 时间戳,from_unix_time 将 unix 时间戳转换为给定格式。
使用from_unixtime(unix_timestamp(concat('01-',month,'-',year),'dd-MMM-yyyy'),'dd-MM-yyyy') 将'dd-MMM-yyyy' 转换为'dd-MM-yyyy'
演示:
with
your_data as (
select stack(2,
2020, 'January',
2019, 'October'
) as ( Year, Month)
)
select Year, Month, from_unixtime(unix_timestamp(concat('01-',month,'-',year),'dd-MMM-yyyy'),'dd-MM-yyyy') as Date_col
from your_data
;
结果:
year month date_col
2020 January 01-01-2020
2019 October 01-10-2019
这也可以(不与01- 连接,使用“MMM-yyyy”格式):
from_unixtime(unix_timestamp(concat(month,'-',year),'MMM-yyyy'),'dd-MM-yyyy')
如果你想转换为真正的时间戳,也可以不指定输出格式:
from_unixtime(unix_timestamp(concat(month,'-',year),'MMM-yyyy')) --returns 2020-01-01 00:00:00
使用SimpleDateFormat 类文档作为格式参考