获得第一天和第四天的最后一天以及两个季度的约会

时间:2018-05-23 16:06:28

标签: sql date hive hiveql

如何获得约会的第一天和最后一天约会? 还有2个季度的第一天和最后一天回到 Hive 或sql的日期

例如2014年2月3日第一天和本季度的最后一天将是 2014年1月1日和2014年3月31日  并且在同一天,2个季度的第一天和最后一天将是2013年7月1日和2013年9月31日

1 个答案:

答案 0 :(得分:0)

你可以通过以下方式完成此任务(不是太花哨,但没有直接的方法)。为了简化,我只是连接两个输出日期

-- before Hive 1.3
select 
case 
when ceil(month(mydate)/ 3.0) =  1 then concat("Jan 01 ",year(mydate),"|","Mar 31 ",year(mydate))
when ceil(month(mydate)/ 3.0)  =  2 then then concat("Apr 01 ",year(mydate),"|","Jun 30 ",year(mydate))
when ceil(month(mydate)/ 3.0)  =  3 then then concat("Jul 01 ",year(mydate),"|","Sep 30 ",year(mydate))
when ceil(month(mydate)/ 3.0)  =  4 then then concat("Oct 01 ",year(mydate),"|","Dec 31 ",year(mydate))
else
null
end,
ceil(month(mydate)) as quarter

from (
    select 
    from_unixtime(unix_timestamp('Feb 03 2014' , 'MMM dd yyyy')) as mydate
) t;


--Hive 1.3 or higher

select 
case 
when quarter(mydate) =  1 then concat("Jan 01 ",year(mydate),"|","Mar 31 ",year(mydate))
when quarter(mydate)  =  2 then then concat("Apr 01 ",year(mydate),"|","Jun 30 ",year(mydate))
when quarter(mydate)  =  3 then then concat("Jul 01 ",year(mydate),"|","Sep 30 ",year(mydate))
when quarter(mydate)  =  4 then then concat("Oct 01 ",year(mydate),"|","Dec 31 ",year(mydate))
else
null
end,
ceil(month(mydate)) as quarter

from (
    select 
    from_unixtime(unix_timestamp('Feb 03 2014' , 'MMM dd yyyy')) as mydate
) t;

只需在内部查询

中的select中替换列的硬编码日期