如何解决如何比较相似数据
我想将数据插入到 PL-sql。
但我需要检查表是否有相似的数据。
如果表检查有类似信息,则无法添加
例如:
插入数据:ABCD 或 ABCE
表: enter image description here
我该如何编写这个程序?
解决方法
你可以在plsql中使用instr
示例:
declare
x number;
begin
for i in (select distinct value from table)
loop
select count(1) into x
from table2
where instr(Device,i.value) > 0;
if (x = 0) then
insert into table2(Device) values(i.value);
end if;
commit;
end loop;
end;
,
相似还是相同的数据?这有很大的不同。因为如果您不想在您的列中使用相同的数据,您可以使该列唯一。但是如果你想检查类似的数据,呃,这有点难以实现,难以理解,而且这会彻底扼杀你的表现......但如果你仍然想走那条路,你可以查看{{3 }}
,Isi 已经提到了算法;这是您可能正在寻找的示例。
当前表格内容:
SQL> select * from test;
COL
-----
ABC
ABD
ABR
以下是当前值与您要插入的某些字符串(ABCD、FDGH)的相似:
SQL> select t.col,2 utl_match.jaro_winkler_similarity('ABCD',t.col) sim_abcd,3 utl_match.jaro_winkler_similarity('FDGH',t.col) sim_fdgh
4 from test t;
COL SIM_ABCD SIM_FDGH
----- ---------- ----------
ABC 94 0
ABD 93 52
ABR 77 0
现在,由您决定哪个值将代表限制,并决定是否在该表中插入一个值。我们假设它是 90%。那么你会
SQL> insert into test (col)
2 select '&&par_insert'
3 from dual
4 where 90 > (select max(utl_match.jaro_winkler_similarity('&&par_insert',a.col))
5 from test a
6 );
Enter value for par_insert: ABCD
0 rows created.
SQL>
对; ABCD 与任何当前值相似超过 90% 且未插入。
FDGH 怎么样?
SQL> undefine par_insert
SQL> /
Enter value for par_insert: FDGH
1 row created.
SQL> select * from test;
COL
-----
ABC
ABD
ABR
FDGH
SQL>
是的,它被插入了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。