Oracle SQL

时间:2016-04-05 08:49:42

标签: sql oracle pattern-matching

我的要求是找出它们之间有空格的所有列值。

e.g。我的价值观是'aa bb cc','aa bbcc','aabb cc'。 理想情况下,如果你在它们之间排除空间,它们都是相同的! 如何使用查询或任何类型的机制从表中找出所有这些类型的列。

提前致谢。

2 个答案:

答案 0 :(得分:0)

您可以REPLACE()使用EXISTS(),如下所示:

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

答案 1 :(得分: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