我有一个年份月份格式的数字字段:
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?
答案 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 |
+-------------+--+