获取所需的季度日期 - SQL

时间:2017-06-14 13:53:45

标签: sql oracle

我想在单个sql语句中根据输入(第1列)获取所需的输出(第2列)。

-201701 - 31-Dec-2016
-201702 - 31-Dec-2016
-201703 - 31-Mar-2017
-201704 - 31-Mar-2017
-201705 - 31-Mar-2017
-201706 - 30-Jun-2017
-201707 - 30-Jun-2017
-201708 - 30-Jun-2017
-201709 - 30-Sep-2017
-201710 - 30-Sep-2017
-201711 - 30-Sep-2017
-201712 - 31-Dec-2017

直到现在我得到了一个解决方案,工作正常:

select TRUNC(LAST_DAY(TO_DATE([Column 1] value,'RRRRMM'))+1,'Q')-1 from dual

请告知是否有任何其他解决方案,或者如果在未来几年向前推进时我将面临任何问题......

2 个答案:

答案 0 :(得分:1)

您的解决方案将处理未来。

使用这个表达式可以进行简单的修改:

 trunc(trunc(add_months(dt,+1),'mm'),'q')-1

e.g:

with dat as (
  select trunc(to_date('2017'||to_char(level,'00'),'yyyymm')) dt 
    from dual where level <= 12 
    connect by level < 12)
select dt, trunc(trunc(add_months(dt,+1),'mm'),'q')-1 quarter 
  from dat;

但到目前为止它没有太大的区别。

考虑使用持有RRRR的YYYY。 RRRR掩码假设当前世纪进行计算。

答案 1 :(得分:-1)

with dat as (
  select trunc(to_date('2017'||to_char(level,'00'),'yyyymm')) dt 
    from dual where level <= 12 
    connect by level < 12)
select dt, trunc( dt + 32, 'q')-1 quarter 
  from dat;