sql - Oracle中如何修剪不同列中的文本
问题描述
我有一个来自数据库字段的字符串,其中包含以下格式的数据。, UW:
,字段可以存在Loading:
。CBE:
例1:
"[UW:Loading25,CBE]
[Loading: 100;120;130]
[CBE:150;170;190]"
例 2:
"[UW: CBE]
[CBE: 100;122;130]"
例 3:
"[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 |
我该如何解决这个问题?
解决方案
您可以与每个搜索模式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
应该注意。