首页 > 解决方案 > 如何在 Hive 查询中将“yyyy-m-dd”中的字符串日期转换为“yyyy-mm-dd”?

问题描述

我上下搜索,但找不到任何有效的东西。

我有一个日期以这种格式存储为字符串:'2021-9-01',因此月份列中没有前导零。这是尝试选择最大日期时的一个问题,因为它将 9 月解释为大于 10 月。

每当我运行试图转换它的东西时,它实际上永远不会完成。选择 * from... 时,我可以拉回 1 行,但这无法完成:

  select unix_timestamp(bad_date, 'yyyy-m-dd') from mytable

我正在使用 hive 查询,所以不确定如何进行此转换,以便我实际上可以让 10 月(本月)显示为最大日期?

标签: datehivetimestamphqlunix-timestamp

解决方案


月份的正确模式是MM. mm是分钟。

from_unixtime(unix_timestamp(bad_date, 'yyyy-M-dd'),'yyyy-MM-dd')

另一种方法是使用 lpad 进行拆分和连接:

select concat_ws('-',splitted[0], lpad(splitted[1],2,0),splitted[2])
from
(
select split('2021-9-01','-') splitted
)s

结果:

2021-09-01

推荐阅读