获取一个季度的第一天和最后一天以及 2 个季度的日期

Posted

技术标签:

【中文标题】获取一个季度的第一天和最后一天以及 2 个季度的日期【英文标题】:getting first day and last day of a quarter and 2 quarters back for a date 【发布时间】:2018-05-23 16:06:27 【问题描述】:

如何获取日期的一个季度的第一天和最后一天? 以及 Hive 或 sql

中日期的 2 个季度的第一天和最后一天

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

【问题讨论】:

欢迎来到 Stack Overflow。请阅读如何提供Minimal, Complete, and Verifiable example 您还可以从How to ask 和What is expected of SO users 中受益 【参考方案1】:

您可以通过以下方式完成此操作(不是太花哨,但没有直接的方法)。为了简单起见,我只是连接了两个输出日期

-- 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 to_date( concat(year(_c0),"-",1+3*(quarter(_c0)-1),"-01")) from ( select CURRENT_DATE() ) as asdf ; Apache Hive(版本 2.3.2) 和学期开始select to_date( concat( YEAR(_c0), "-0", CASE WHEN QUARTER(_c0) IN (1, 2) THEN 1 ELSE 7 END, "-01" )) from ( select CURRENT_DATE() ) as asdf ;

以上是关于获取一个季度的第一天和最后一天以及 2 个季度的日期的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server学习记录之获取每月每季度每年第一天和最后一天

php求当前季度的第一天和最后一天

PL/SQL(如何计算任何一年任何季度的第一天和最后一天)

甲骨文下个季度的第一天

获取当前季度的第一天

SQL语句 如何取得指定月份的最后一天的日期