Используйте SUBSTR
, чтобы получить 4-символьную подстроку года, начиная с 3-го символа, а затем преобразовать ее в число:
SELECT sale_period,
TO_NUMBER( SUBSTR( sale_period, 3, 4 ) ) AS sale_year,
-- and for the other components:
SUBSTR( sale_period, 1, 2 ) AS sale_month,
TO_NUMBER( SUBSTR( sale_period, 7 ) ) AS sale_store
FROM my_table;
выводит:
SALE_PERIOD | SALE_YEAR | SALE_MONTH | SALE_STORE
:---------- | --------: | :--------- | ---------:
JA20185 | 2018 | JA | 5
DE2019123 | 2019 | DE | 123
Поскольку столбец SALE_PERIOD
имеет четко определенный формат для подстрок, вы также можете добавить в таблицу виртуальные столбцы:
ALTER TABLE my_table ADD (
sale_year NUMBER(4,0) GENERATED ALWAYS AS ( TO_NUMBER( SUBSTR( sale_period, 3, 4 ) ) ) VIRTUAL,
sale_month CHAR(2) GENERATED ALWAYS AS ( CAST( SUBSTR( sale_period, 1, 2 ) AS CHAR(2) ) ) VIRTUAL,
sale_store NUMBER(5,0) GENERATED ALWAYS AS ( TO_NUMBER( SUBSTR( sale_period, 7 ) ) ) VIRTUAL
)
, затем:
SELECT * FROM my_table;
дает те же выходные данные, что и выше, с этими дополнительными виртуальными столбцами.
db <> fiddle здесь