В Oracle у меня есть названия кварталов, начальный и конечный периоды, как преобразовать все эти кварталы в год? - PullRequest
0 голосов
/ 23 марта 2020

У меня есть данные как ниже.

          QUATER NAME   Start Period   end Period
Q-FISCAL   FY20 Q3     1/26/2020      4/25/2020
Q-FISCAL   FY20 Q2     10/27/2019     1/25/2020
Q-FISCAL   FY20 Q1     7/28/2019      10/26/2019

Я ищу данные как LIKE

       FY2020

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Если все, что вы хотите сделать, это превратить названия кварталов, такие как 'Q-FISCAL FY20 Q3', в годы, то это просто строковая операция:

select 'FY20' || substr(quarter_name, 14, 2) from ...

Если в таблице указаны годы до 2000 , затем используйте выражение CASE, например:

select
  case when to_number(substr(quarter_name, 14, 2)) > 30
    then 'FY19' || substr(quarter_name, 14, 2)
    else 'FY20' || substr(quarter_name, 14, 2)
  end as year,
  start_period,
  end_period
from mytable;
0 голосов
/ 24 марта 2020

Пример данных у вас не очень ясно; что именно делает quarter_name? Я предположил, что это все в начале строки, вплоть до первого свидания. Если это так, посмотрите, поможет ли что-то подобное. Даже если не сразу, этот принцип вы можете изменить. Я бы посоветовал вам сделать это шаг за шагом, точно так же, как я, пытаясь разделить каждую часть на свою строку для лучшей читаемости.

SQL> with test (quarter_name, start_period, end_period) as
  2    (select 'Q-FISCAL FY20 Q3', date '2020-01-26', date '2020-04-25' from dual union all
  3     select 'Q-FISCAL FY20 Q2', date '2019-10-27', date '2020-01-25' from dual union all
  4     select 'Q-FISCAL FY20 Q1', date '2019-07-28', date '2019-10-26' from dual union all
  5     --
  6     select 'Q-FISCAL FY18 Q3', date '2018-01-26', date '2018-04-26' from dual
  7    )
  8  select
  9    regexp_replace(quarter_name,
 10                   substr(quarter_name, instr(quarter_name, ' ') + 1, 4),
 11                   --
 12                   substr(quarter_name, instr(quarter_name, ' ') + 1, 2)
 13                   ||
 14                   to_char(
 15                           to_date (
 16                                    substr(quarter_name, instr(quarter_name, ' ') + 3, 2),
 17                                    'rrrr'
 18                                   ),
 19                                    'rrrr'
 20                          )
 21                  ) new_quarter_name,
 22    --
 23    start_period,
 24    end_period
 25  from test;

NEW_QUARTER_NAME     START_PERI END_PERIOD
-------------------- ---------- ----------
Q-FISCAL FY2020 Q3   01/26/2020 04/25/2020
Q-FISCAL FY2020 Q2   10/27/2019 01/25/2020
Q-FISCAL FY2020 Q1   07/28/2019 10/26/2019
Q-FISCAL FY2018 Q3   01/26/2018 04/26/2018

SQL>

Что это делает?

  • строки # 1 - 7: выборочные данные; он уже есть в таблице, поэтому необходимый код начинается со строки № 8
  • строка № 9: замените quarter_name 's ...
  • строка № 10: ... 4 символы, следующие за первым пробелом (например, FY20) ...
  • строки # 12 - 20: ... с
    • строка # 12: первые 2 символа, следующие за первый пробел (FY), объединенный с ...
    • строками # 14 - 20: ... значение года увеличено до 4 символов (например, с 20 до 2020 или с 18 до 2018)
      • строка # 16: годовая часть подстроки FY20 (например, 20 или 18)
      • строка # 17: применить к ней маску формата rrrr (используя функцию to_date ) так что это становится например 2020; если бы это была yyyy маска формата, вы бы получили 0020. В результате получается, например, 01/01/2020 00:00:00 - полная дата со временем
      • строка # 19: примените ту же маску формата rrrr к этому значению даты (используя функцию to_char), чтобы извлечь только год из, например, 01/01/2020 00:00:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...