1

この件に関しては、さまざまな投稿があります。しかし、私のプロジェクトに適したものを本当に見つけることができません。varchar2 の 4 列、長さ 20、60、72、および 160 のテーブルがあります。項目/製品のデータを含む apx ≈ 700 000 レコードが含まれています。

表の例:

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

チェックでは大文字と小文字が区別されないことに注意してください。

4

1 に答える 1

2

たとえば、このブログ投稿はあなたの質問に適用されます: 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 (すべて大文字) を期待していました。これは一貫性がないので、単に無視しました。

于 2013-08-28T06:07:58.727 に答える