关于这个主题的很多不同的帖子。 但我真的找不到适合我项目的那个。 我有一个包含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
请注意,检查不区分大小写。
答案 0 :(得分:2)
E.g。此博文适用于您的问题:Splitting a comma delimited string the RegExp way, Part Two。我的答案直接来源于博客:
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
;
请注意,此查询的输出与您在1到5的ID问题中列出的输出完全相同。您期望Levi(带有initcap)和GRADY(全部大写),即使这两个名称都有两种变体 - 这是不一致的,所以我只是忽略它。