我想在单个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
请告知是否有任何其他解决方案,或者如果在未来几年向前推进时我将面临任何问题......
答案 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;