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

Hive 将201811转换为格式为yyyymmdd 20181101的日期,hive,hiveql,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转换为格式为yyyymmdd的2018年1月1日

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

201801
201802
201803
etc
我想将这些转换为日期,仅使用月的第一个:

20180101
20180201
20180301
etc
下了一个堆垛溢出的兔子洞,尝试了几件事,最终在失败之前走了这么远:

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

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

Hive希望date格式为
yyyy-MM-dd
,但您正在将
yyyymmdd
转换为日期数据类型,这就是为什么您在截止日期之后得到空值的原因

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  |
+-------------+--+

谢谢,但这是日期还是int数据类型?最终目标是将其作为一个日期,以便我可以使用日期函数(例如,
months\u between()
)@DougFir,如果我们转换为
date类型
,那么我们将有
Null
值,如果我们不转换,那么它将被视为与表中定义的列相同的数据类型(即string、bigint..等等)。@DougFir,由于要运行
months\u between()
,则需要将列的格式更改为
'yyyy-MM-dd'
(列数据类型为string/date),然后我们可以在列上运行所有内置函数。