Как обрезать текст в разных столбцах в Oracle - PullRequest
1 голос
/ 07 мая 2019

У меня есть строка из базы данных, которая содержит данные в следующем формате: Поля UW:, Загрузка :, CBE: могут присутствовать

EX1:

"[UW:Loading25,CBE]
[Loading: 100;120;130]
[CBE:150;170;190]"

ех2:

"[UW: CBE]
[CBE: 100;122;130]"

EX3:

"[UW:Loading25]
[Loading: 100;120;130]"

Я должен разделить их на разные столбцы, как указано ниже:

     UW       |    Loading     |  CBE  
--------------|----------------|------------
Loading25,CBE |  100;120;130   | 150;170;190
--------------|----------------|------------
CBE           |                |100;122;130 
--------------|----------------|------------
Loading25     |  100;120;130   |            

Пожалуйста, вы можете помочь в решении этой проблемы.

1 Ответ

0 голосов
/ 07 мая 2019

Вы можете использовать regexp_substr вместе с ltrim для каждого шаблона поиска:

with t(str) as
(
 select '[UW:Loading25,CBE][Loading: 100;120;130][CBE:150;170;190]' from dual union all
 select '[UW: CBE][CBE: 100;122;130]' from dual union all
 select '[UW:Loading25][Loading: 100;120;130]' from dual  
)
select ltrim(regexp_substr(str,'UW:([^]]+)'),'UW:') as uw,
       ltrim(regexp_substr(str,'Loading:([^]]+)'),'Loading:') as loading,
       ltrim(regexp_substr(str,'CBE:([^]]+)'),'CBE:') as cbe
  from t;

UW               LOADING        CBE
-------------    -------------  ------------
Loading25,CBE    100;120;130    150;170;190
CBE                             100;122;130
Loading25        100;120;130    

Повторяющиеся слова, такие как Loading или CBE, должны быть замечены во время сопоставления шаблонов.

...