oracle sql 最近5个季度的最后一天
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle sql 最近5个季度的最后一天相关的知识,希望对你有一定的参考价值。
求大神的s帮忙,最近5个季度的最后一天,如果当前日期为季度末的一天,以当前日期为第一个日期,如果当前日期部位季度末的一天,以上个季度末的最后一天第一个日期,
ALTER session SET nls_date_format='yyyy-mm-dd';with mycte AS (
SELECT TRUNC( SYSDATE + 1, 'Q' ) AS TopDay FROM DUAL
)
SELECT TopDay -1 AS Result FROM mycte UNION ALL
SELECT ADD_MONTHS(TopDay,3) -1 AS Result FROM mycte UNION ALL
SELECT ADD_MONTHS(TopDay,6) -1 AS Result FROM mycte UNION ALL
SELECT ADD_MONTHS(TopDay,9) -1 AS Result FROM mycte UNION ALL
SELECT ADD_MONTHS(TopDay,12) -1 AS Result FROM mycte;
RESULT
----------
2013-03-31
2013-06-30
2013-09-30
2013-12-31
2014-03-31
-- 假如今天是 季度的最后一天.(例如 2013-06-30 )
with mycte AS (
SELECT TRUNC( TO_DATE('20130630', 'YYYYMMDD') + 1, 'Q' ) AS TopDay FROM DUAL
)
SELECT TopDay -1 AS Result FROM mycte UNION ALL
SELECT ADD_MONTHS(TopDay,3) -1 AS Result FROM mycte UNION ALL
SELECT ADD_MONTHS(TopDay,6) -1 AS Result FROM mycte UNION ALL
SELECT ADD_MONTHS(TopDay,9) -1 AS Result FROM mycte UNION ALL
SELECT ADD_MONTHS(TopDay,12) -1 AS Result FROM mycte;
RESULT
----------
2013-06-30
2013-09-30
2013-12-31
2014-03-31
2014-06-30 参考技术A 提问要写清楚问题,最好举例说明。
获取一个季度的第一天和最后一天以及 2 个季度的日期
【中文标题】获取一个季度的第一天和最后一天以及 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 ;
以上是关于oracle sql 最近5个季度的最后一天的主要内容,如果未能解决你的问题,请参考以下文章