我跑步时
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。
答案 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并发明自己的方法。