获取上一季度的最后一天

时间:2019-05-13 13:10:15

标签: date hive calendar hiveql

我跑步时

SELECT
  MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL QUARTER(CURDATE())-1 QUARTER - INTERVAL 1 DAY

here,它可以正常工作。但是,在Hive中,我收到一个错误,提示我缺少右括号。我的查询是:

SELECT t1.*, t2.programme
    FROM table1 t1
    LEFT JOIN (SELECT programme FROM table2
        WHERE yyyy_mm_dd = MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL QUARTER(CURDATE())-1 QUARTER - INTERVAL 1 DAY
    ) t2 ON t2.id = t1.id AND t2.yyyy_mm_dd = t1.yyyy_mm_dd

我做错了什么?

  

编译语句时出错:失败:'QUARTER'l附近的'QUARTER'缺少ParseException行4:75

我们正在使用Hive v1.1.0。

2 个答案:

答案 0 :(得分:1)

Hive与MySQL的语法和功能不同。

Here是Hive支持的所有日期函数的列表。

使用这些功能,您的SELECT查询将转换为:

SELECT
  date_add(add_months(trunc(date()), (extract(quarter from date()) -1 ) * 3)), -1)

答案 1 :(得分:1)

这可以通过多种方式来完成。两种方法:

select last_day(printf('%04d-%02d-%02d',year(current_date),(month(current_date)-1) div 3 * 3 ,1));

返回:

2019-03-31

在这里测试:http://demo.gethue.com/hue/editor?editor=326549

另一种方法:

select last_day(concat(year(current_date),'-',lpad((month(current_date)-1) div 3 * 3,2,0) ,'-01'))

测试:http://demo.gethue.com/hue/editor?editor=326554

重要版本注意::在旧版本的Hive current_date可能不起作用的情况下,请改用unix_timestamp()

select last_day(concat(year(current_timestamp()),'-',lpad((month(current_timestamp())-1) div 3 * 3,2,0) ,'-01'))

测试:http://demo.gethue.com/hue/editor?editor=326565

阅读manual并发明自己的方法。