SQL在表中查找部分重复项

时间:2017-06-08 20:54:50

标签: sql oracle

我有一个表,其中一个列中包含部分重复值,这是表中的主键。我试着写一个查询来查找那些重复的内容并且无法弄明白。 例如:

Taxi(Number, id) - Number is primary key on the table
Values(123, 253)
Values(123-, 253)
Values(1 23,253)

根据要求将这些全部视为重复。 这是我试过的没有运气的查询

select * from taxi t where exists(
select 1 from taxi t2
where t1.id = t2.id
and t2.number like t1.number||'%')

这给了我所有的价值。任何帮助表示赞赏

2 个答案:

答案 0 :(得分:1)

也许translate()会做你想做的事:

select translate(number, '0- ', '0') as fixed_number

第一个字符串中0之后的所有字符都将被删除。

所以,如果你想要重复:

select t.*
from (select translate(number, '0- , '0') as fixed_number, t.*,
             count(*) over (partition by translate(number, '0- ', '0')) as cnt
      from t
     ) t
where cnt > 1
order by fixed_number;

答案 1 :(得分:0)

你弄乱了数据。尝试使用正则表达式选择和分组,删除空白和' - ' [和其他人物]。任何具有计数(*)>的集合1是重复。