关于这个主题有很多不同的帖子。但我真的找不到适合我项目的。我有一张表,有4列varchar2,长度分别为20、60、72和160。包含apx≈70万条记录以及项目/产品的数据。
表格示例:
Text Id SHNAM
LEVI,GRADY Whitley 1 007C
Levi Grady;Whitley 2 0001
BEVIS,GRADY Leblanc 3 007D
Aladdin Grady;Green 4 0002
ULLA,GRADY Holman 5 0003
从这个表中,我想填充一个新的表或每个唯一单词的物化视图。使用的分隔符可以是空格、逗号或分号(',;')。
预期输出:
OUTPUT
Levi
GRADY
Whitley
BEVIS
Leblanc
Aladdin
Green
ULLA
Holman
请注意,该检查不区分大小写。
例如,这篇博客文章适用于您的问题:以RegExp方式拆分逗号分隔的字符串,第二部分。我的答案直接来自博客:
with data_(id_, str) as (
select 1, 'LEVI,GRADY Whitley' from dual union all
select 2, 'Levi Grady;Whitley' from dual union all
select 3, 'BEVIS,GRADY Leblanc' from dual union all
select 4, 'aladdin grady;green' from dual union all
select 5, 'ULLA,GRADY Holman' from dual union all
select 6, '1aar,1bar;1car 1dar,1ear' from dual
)
select distinct lower(regexp_substr(str, '[^,;[:space:]]+', 1, rownum_)) as splitted
from data_
cross join (select rownum as rownum_
from (select max(regexp_count(str, '[,;[:space:]]')) + 1 as max_
from data_
)
connect by level <= max_
)
where regexp_substr(str, '[^,;[:space:]]+', 1, rownum_) is not null
order by splitted
;
请注意,这个查询的输出与您在问题中列出的ID从1到5的输出不完全相同。你期望Levi(带initcap)和GRADY(全大写),即使这两个名字都有变体-这是不一致的,所以我只是忽略了它。