如何在Hive SQL中获取Quarter to Date?

时间:2017-05-15 15:42:43

标签: sql hive hql

我很难从Hive SQL获取季度到日期值。 如何在Hive sql中获得当前季度的第一天?

表名:订单

字段:date,order_num,sales_num

请指教。

2 个答案:

答案 0 :(得分:0)

这似乎是最干净的方式

with t as (select date '2016-08-27' as dt) 
select add_months(trunc(dt,'MM'),-(month(dt)-1)%3) from t
;
  

2016年7月1日

以下是另外两个选项

with t as (select date '2016-08-27' as dt) 
select  trunc(add_months(dt,-(month(dt)-1)%3),'MM') 
from    t
;
  

2016年7月1日

with t as (select date '2016-08-27' as dt) 
select  add_months(trunc(dt,'YY'),cast((month(dt)-1) div 3 * 3 as INT)) 
from    t
;
  

2016年7月1日

对于早期版本

with t as (select '2016-08-27' as dt)
select  printf('%04d-%02d-%02d',year(dt),(((month(dt)-1) div 3) * 3) + 1,1)
from    t
  

2016年7月1日

相同,但今天

with t as (select from_unixtime(unix_timestamp(),'yyyy-MM-dd') as today)
select  printf('%04d-%02d-%02d',year(today),(((month(today)-1) div 3) * 3) + 1,1) as 
from    t
  

2017年4月1日

答案 1 :(得分:0)

如果你不能使用Dudu建议的各种日期函数,你可以随时将其转换为字符串,解析月份,并使用case语句。根据您的Hive版本,您可能必须使用简单的案例而不是搜索。

(假设YYYY-MM-DD)

case cast (substring (cast(<date field> as varchar(10)),6,2) as integer)
when between 1 and 3 then 1
when between 4 and 6 then 2
when between 7 and 9 then 3
else 4
end

丑陋,但它应该有用。