2016-04-05 20 views
-3

私の要件は、それらの間にスペースがあるすべての列値を見つけることです。Oracle SQLの列のパターン一致

私の値は「aa bb cc」、「aa bbcc」、「aabb cc」です。 これらの間にスペースを入れないと理想的には同じです! クエリまたは任意の種類のメカニズムを使用して、これらのタイプの列をすべてテーブルから見つける方法を教えてください。

ありがとうございます。

あなたはこのよう EXISTS()REPLACE()を使用することができます
+1

最初の段落だけで、あなたは「言いますスペースで値を探します。 2番目の段落では、空白を無視すると同じ値を探していますが、空白を無視して数えたり、何か他のものを探したりしていますか? –

+0

はい。あなたが正しいです。空白を除いた重複を探しています –

+0

単一の行またはすべての重複行のリストが必要ですか?あなたの例では、1つの集約行または3つの行すべてが必要ですか? – Aleksej

答えて

0

SELECT * FROM YourTable t 
WHERE EXISTS(SELECT 1 FROM YourTable s 
      WHERE replace(t.YourCol,' ','') = replace(s.YourCol,' ','') 
       and t.YourCol <> s.YourCol) 
0

あなたは単にあなたの文字列からスペースを削除して集約する結果を使用することができます。

create table dupTest (val varchar2(16)); 

insert into dupTest values ('aa bb cc'); 
insert into dupTest values ('aa bbcc'); 
insert into dupTest values ('aabb cc'); 
insert into dupTest values ('aaBB cc'); 
insert into dupTest values ('a a B B c c'); 
insert into dupTest values ('C C B B C C'); 

SQL> select replace(val, ' ', '') as no_space_string, 
    2   count(1) as num 
    3 from dupTest 
    4 group by replace(val, ' ', '') 
    5 having count(1) > 1; -- only values with more than one occurrence 

NO_SPACE_STRING  NUM 
-------------------- ---- 
aabbcc     3 
aaBBcc     2 
+0

私は彼がトリムされた値がユニークな値ではなくユニークではない行をすべて望んでいると思います。 – sagi

+0

@サギ:あなたは正しいかもしれませんが、その質問ははっきりしていません。 OPのコメントを追加し、より明確な結果が得られることを期待しました – Aleksej

関連する問題