如何在HIVE中查找以前的日期

时间:2018-08-22 14:13:23

标签: hadoop hive

我想在Hive中找到以前的日期。

例如:

我的日期格式为20180821(yyyyMMdd),我想在Hive中查找此日期的以前的日期。我尝试了date_sub()函数,似乎它仅适用于yyyy-MM-dd格式。

如何解决我的问题。请帮助

3 个答案:

答案 0 :(得分:1)

在现有格式上使用yyyy-MM-ddfrom_unixtime将格式转换为unix_timestamp,然后使用date_sub

date_sub(from_unixtime(unix_timestamp('20180821','yyyyMMdd'),'yyyy-MM-dd'),1)

答案 1 :(得分:1)

可能重复:How to get previous day date in Hive

要回答您的问题,date_sub将获取前一天的记录。它仅适用于您的日期值,格式为:yyyy-MM-dd。 date_sub的语法为: date_sub(String date, Int days)

因此,您需要首先将当前日期格式转换为yyyy-MM-dd格式。为此,请使用以下查询:

SELECT from_unixtime(unix_timestamp('20180821','yyyyMMdd'),'yyyy-MM-dd' as converted_date_format;

接下来,您将date_sub应用于上面的结果集(具有1天的值)以获取上一条记录。

select date_sub(from_unixtime(unix_timestamp('20180821','yyyyMMdd'),'yyyy-MM-dd'),1) as previous_day;

话虽如此,如果您的要求是将日期格式保持为yyyyMMdd,则可以应用regex_replace函数删除'-',如下所示:

select regexp_replace(date_sub(from_unixtime(unix_timestamp('20180821','yyyyMMdd'),'yyyy-MM-dd'),1),'-','') as previous_day_formatted_yyyymmdd;

希望这会有所帮助:)

答案 2 :(得分:1)

除了已经提供的unix_timestamp转换解决方案之外,请考虑这一点。 使用substr()进行的相同转换看起来要长一点,但是它可以与任何'19691231 19:00:00'这样的日期/时间戳一起使用,而不会出现TZ问题,这也并不慢,因为不使用SimpleDateFormat / etc而不应用TZ

date_sub(concat_ws('-', substr('20180821',1,4), substr('20180821',5,2), substr('20180821',7,2)),1)