将会计年度和会计季度转换为会计年度月份

时间:2019-05-30 14:18:40

标签: sql oracle

我在一个表中有2列,即Financial_Year和Financial_Quarter。数据示例如下:

Financial_Year  Financial_Quarter
2018/2019         2

我想生成一个名为“ Year_month”的第三列,它是每个财政年度中该季度的最后一个月,因此在上面的示例中,我希望year_month列的显示为201809。

有人知道如何在Oracle SQL中执行此操作吗?

2 个答案:

答案 0 :(得分:1)

假设FINANCIAL_YEAR列是一个字符串(两个数字之间用斜杠分隔),并且2018/2019财政年度始于2018年4月1日,结束于2019年3月31日,则可以执行以下操作:

with
  test_data (financial_year, financial_quarter) as (
    select '2018/2019', 1 from dual union all
    select '2018/2019', 2 from dual union all
    select '2018/2019', 3 from dual union all
    select '2018/2019', 4 from dual
  )
select financial_year, financial_quarter,
       to_char(add_months(to_date(substr(financial_year, 1, 4) || '03', 'yyyymm'),
                          3 * financial_quarter), 'yyyymm') as year_month
from   test_data
;

FINANCIAL_YEAR  FINANCIAL_QUARTER  YEAR_MONTH
--------------  -----------------  ----------
2018/2019                       1  201806
2018/2019                       2  201809
2018/2019                       3  201812
2018/2019                       4  201903

另外,只是出于娱乐目的,这是一个不使用任何日期计算的不同解决方案-它全部基于字符串。

select financial_year, financial_quarter,
       substr(financial_year, decode(financial_quarter, 4, 6, 1), 4) ||
       decode(financial_quarter, 1, '06', 2, '09', 3, '12', 4, '03') as year_month
from   test_data
;

答案 1 :(得分:0)

我想有很多方法可以给这只猫剥皮,这是一个

SELECT CASE WHEN financial_quarter = '4' THEN SUBSTR(financial_year, 6, 4) || '03' 
       ELSE SUBSTR(financial_year, 1, 4) || LPAD((financial_quarter + 1) * 3, 2, '0')
       END
FROM some_table

如果financial_quarter是数字,则当然需要用4替换'4'