将201811转换为格式为yyyymmdd 20181101的日期

时间:2018-11-07 17:50:34

标签: hive hiveql

我有一个年份月份格式的数字字段:

201801
201802
201803
etc

我想仅使用每月的第一天将它们转换为日期:

20180101
20180201
20180301
etc

沿着一个堆栈溢出的兔子洞走了下来,尝试了几件事,最终在失败之前走了很远:

select to_date(concat(cast(cast(201809 as BIGINT) as STRING), "01")) # returns null

如何转换例如201801到日期为2018年1月第一日的格式为yyyymmdd,即20180101?

1 个答案:

答案 0 :(得分:1)

Hive期望日期格式为yyyy-MM-dd,但是在您的情况下,您要将yyyyMMdd转换为日期数据类型,这就是在 to_date之后获得空值的原因

hive> select concat(cast(cast(201809 as BIGINT) as STRING), "01");
+-----------+--+
|    _c0    |
+-----------+--+
| 20180901  |
+-----------+--+

转换为日期:

hive> select to_date(from_unixtime(unix_timestamp(concat(bigint('201908'),'01'),
'yyyyMMdd'),'yyyy-MM-dd'));
+-------------+--+
|     _c0     |
+-------------+--+
| 2019-08-01  |
+-------------+--+