Перевести финансовый год и финансовый квартал в год - PullRequest
0 голосов
/ 30 мая 2019

У меня есть 2 столбца в таблице, Financial_Year и Financial_Quarter.Ниже приведены примеры данных:

Financial_Year  Financial_Quarter
2018/2019         2

Я хочу создать третий столбец с именем Year_month, который является последним месяцем квартала в каждом финансовом году, поэтому в приведенном выше примере я хочустолбец year_month: 201809.

У кого-нибудь есть подсказки, как это сделать в Oracle SQL?

Ответы [ 2 ]

1 голос
/ 30 мая 2019

Если предположить, что столбец FINANCIAL_YEAR представляет собой строку (два числа, разделенные косой чертой), а финансовый год 2018/2019 начинается 1 апреля 2018 года и заканчивается 31 марта 2019 года, вы можете сделать что-то вроде этого:

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
;
0 голосов
/ 30 мая 2019

Я полагаю, что есть много способов снять шкуру с этой кошки, вот один

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

Конечно, "4" нужно заменить на 4, если financial_quarter является числовым

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...