获取上一季度的最后一天
Getting last day of previous quarter
当我运行
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
我做错了什么?
Error while compiling statement: FAILED: ParseException line 4:75 missing ) at 'QUARTER' near 'QUARTER' l
我们正在使用 Hive v1.1.0。
Hive 的语法和功能与 MySQL 不同。
Here 是 Hive 支持的所有日期函数的列表。
使用这些函数,您的 SELECT 查询转换为:
SELECT
date_add(add_months(trunc(date()), (extract(quarter from date()) -1 ) * 3)), -1)
这可以通过多种方式实现。两种方法:
select last_day(printf('%04d-%02d-%02d',year(current_date),(month(current_date)-1) div 3 * 3 ,1));
Returns:
2019-03-31
还有一个方法:
select last_day(concat(year(current_date),'-',lpad((month(current_date)-1) div 3 * 3,2,0) ,'-01'))
重要版本注意: 在旧版本的 Hive 中 current_date
可能不起作用,请改用 unix_timestamp()
:
select last_day(concat(year(current_timestamp()),'-',lpad((month(current_timestamp())-1) div 3 * 3,2,0) ,'-01'))
阅读 manual 并发明您自己的方法。
当我运行
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
我做错了什么?
Error while compiling statement: FAILED: ParseException line 4:75 missing ) at 'QUARTER' near 'QUARTER' l
我们正在使用 Hive v1.1.0。
Hive 的语法和功能与 MySQL 不同。
Here 是 Hive 支持的所有日期函数的列表。
使用这些函数,您的 SELECT 查询转换为:
SELECT
date_add(add_months(trunc(date()), (extract(quarter from date()) -1 ) * 3)), -1)
这可以通过多种方式实现。两种方法:
select last_day(printf('%04d-%02d-%02d',year(current_date),(month(current_date)-1) div 3 * 3 ,1));
Returns:
2019-03-31
还有一个方法:
select last_day(concat(year(current_date),'-',lpad((month(current_date)-1) div 3 * 3,2,0) ,'-01'))
重要版本注意: 在旧版本的 Hive 中 current_date
可能不起作用,请改用 unix_timestamp()
:
select last_day(concat(year(current_timestamp()),'-',lpad((month(current_timestamp())-1) div 3 * 3,2,0) ,'-01'))
阅读 manual 并发明您自己的方法。