在Hive或 Impala 中从进入到时间戳的对话

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

在impala或hive中有没有一种简单的方法将int转换为timestamp数据类型。
我使用下面的代码将int转换为timestamp,但我认为这不是一种有效的方法。

20180520

CAST(concat(substring(CAST(datalake_date as string),1,4),'-',substring(CAST(datalake_date as string),5,2),'-',substring(CAST(datalake_date as string),7,2)) 
     AS TIMESTAMP)

---提取年份---

,date_part('Year',
CAST(concat(substring(CAST(datalake_date as string),1,4),'-',substring(CAST(datalake_date as string),5,2),'-',substring(CAST(datalake_date as string),7,2)) 
     AS TIMESTAMP)
          ) datalake_date

2018

sg24os4d

sg24os4d1#

使用 unix_timestamp(string date, string pattern) 将给定的日期格式转换为从1970-01-01经过的秒数。然后使用from\u unixtime()转换为所需格式:

select from_unixtime(unix_timestamp( '20180520','yyyyMMdd'),'yyyy-MM-dd');

退货:

OK
2018-05-20
Time taken: 0.057 seconds, Fetched: 1 row(s)

提取年份的简单方法是使用substr:

select substr('20180520',1,4);
OK
2018
Time taken: 3.062 seconds, Fetched: 1 row(s)

或者在以上(请参阅第一个查询)转换为您可以使用的标准配置单元格式“yyyy-mm-dd”之后 year() , date_format 功能

643ylb08

643ylb082#

您可以像这样直接解析到unix时间戳

select unix_timestamp('20180520', 'yyyyMMdd');

之后,您有几个自定义项来操作日期、提取年份、日期等

相关问题