oracle如何重复字符,oracle根据字段去重复

oracle如何查重复数据并显示出来?

SELECT *

创新互联是一家集网站建设,桃城企业网站建设,桃城品牌网站建设,网站定制,桃城网站建设报价,网络营销,网络优化,桃城网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

FROM t_info a

WHERE ((SELECT COUNT(*)

FROM t_info

WHERE Title = a.Title) 1)

ORDER BY Title DESC

一。查找重复记录

1。查找全部重复记录

Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)1)

2。过滤重复记录(只显示一条)

Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title)

注:此处显示ID最大一条记录

二。删除重复记录

1。删除全部重复记录(慎用)

Delete 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)1)

2。保留一条(这个应该是大多数人所需要的 ^_^)

Delete HZT Where ID Not In (Select Max(ID) From HZT Group By Title)

注:此处保留ID最大一条记录

1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

select * from people

where peopleId in (select peopleId from people group by peopleId having count(peopleId) 1)

2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录

delete from people

where peopleId in (select peopleId from people group by peopleId having count(peopleId) 1)

and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )1)

3、查找表中多余的重复记录(多个字段)

select * from vitae a

where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) 1)

4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录

delete from vitae a

where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) 1)

and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)1)

5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录

select * from vitae a

where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) 1)

and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)1)

补充:

有两个以上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

1、对于第一种重复,比较容易解决,使用

select distinct * from tableName

就可以得到无重复记录的结果集。

如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除

select distinct * into #Tmp from tableName

drop table tableName

select * into tableName from #Tmp

drop table #Tmp

发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下

假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集

select identity(int,1,1) as autoID, * into #Tmp from tableName

select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID

select * from #Tmp where autoID in(select autoID from #tmp2)

ORACLE有函数可以去掉字段里面的重复字符吗

没有,可以自己写SQL,或者自定义函数:

--自定义函数:

SQL create or replace function f(pstr in varchar2) return varchar2 is

2    v_newstr varchar2(100) := null;

3    i        pls_integer := 1;

4  begin

5    for i in 1 .. length(pstr) loop

6      if instr(v_newstr, substr(pstr, i, 1)) = 0 or v_newstr is null then

7        v_newstr := v_newstr || substr(pstr, i, 1);

8      end if;

9    end loop;

10    return v_newstr;

11  end;

12  /

Function created

SQL with tmp(col) as

2   (select 'aaaabbbcccdefg' from dual union all select 'adbdfre' from dual)

3  select col, f(col) from tmp

4  /

COL            F(COL)

-------------- --------------------------------------------------------------------------------

aaaabbbcccdefg abcdefg

adbdfre        adbfre

--SQL

SQL 

SQL with tmp(col) as

2   (select 'aaaabbbcccdefg' from dual union all select 'adbdfre' from dual)

3  select col, listagg(c) within group(order by sqrt_id) as col1

4    from (select col, c, max(sqrt_id) as sqrt_id

5            from (select t.col,

6                         substr(t.col, column_value, 1) as c,

7                         column_value as sqrt_id

8                    from tmp t,

9                         table(cast(multiset

10                                    (select level

11                                       from dual

12                                     connect by level = length(t.col)) as

13                                    sys.odcinumberlist)))

14           group by col, c)

15   group by col

16  /

COL            COL1

-------------- --------------------------------------------------------------------------------

aaaabbbcccdefg abcdefg

adbdfre        abdfre

oracle如何去除字符串中的重复字符

这个函数的功能主要是用于去除给定字符串中重复的字符串.在使用中需要指定字符串的分隔符.示例:

str := RemoveSameStr('zhang,Zhang,bao,Bao,bao,zhang', ',');

输出: zhang,Zhang,bao,Bao

--SQL

str varchar2(1000);

currentIndex number;

startIndex number;

endIndex number;

type str_type is table of varchar2(30) index by binary_integer;

arr str_type;

Result varchar2(1000);

begin

-- 空字符串

if oldStr is null then

return('');

end if;

--字符串太长

if length(oldStr) 1000 then

return(oldStr);

end if;

str := oldStr;

currentIndex := 0;

startIndex := 0;

loop

currentIndex := currentIndex + 1;

endIndex := instr(str, sign, 1, currentIndex);

if (endIndex = 0) then

exit;

end if;

arr(currentIndex) := trim(substr(str,

startIndex + 1,

endIndex - startIndex - 1));

startIndex := endIndex;

end loop;

--取最后一个字符串:

arr(currentIndex) := substr(str, startIndex + 1, length(str));

--去掉重复出现的字符串:

for i in 1 .. currentIndex - 1 loop

for j in i + 1 .. currentIndex loop

if arr(i) = arr(j) then

arr(j) := '';

end if;

end loop;

end loop;

str := '';

for i in 1 .. currentIndex loop

if arr(i) is not null then

str := str || sign || arr(i);

--数组置空:

arr(i) := '';

end if;

end loop;

--去掉前面的标识符:

Result := substr(str, 2, length(str));

return(Result);

end RemoveSameStr;

转载,仅供参考。


名称栏目:oracle如何重复字符,oracle根据字段去重复
文章来源:http://pwwzsj.com/article/hooece.html