兼容oracle的edit_distance_similarity 比较两个字符串相似度
Posted 瀚高PG实验室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了兼容oracle的edit_distance_similarity 比较两个字符串相似度相关的知识,希望对你有一定的参考价值。
瀚高数据库
目录
环境
症状
问题原因
解决方案
报错编码
环境
系统平台:Linux x86 Red Hat Enterprise Linux 6
版本:4.5.7
症状
在进行应用适配过程中会遇到用户使用oracle的SYS.UTL_MATCH.edit_distance_similarity自带函数,进行比较两个字符串的相似度,但在替换为瀚高数据库后,会产生函数不存在的问题。
问题原因
瀚高数据库内核未兼容oracle的SYS.UTL_MATCH.edit_distance_similarity,暂未支持。
所以需要通过瀚高数据库编写自定义函数的方式去实现oracle的SYS.UTL_MATCH.edit_distance_similarity的相同的效果,达到减少代码修改量的初衷。
解决方案
1、首先在瀚高数据库中创建扩展:
create EXTENSION fuzzystrmatch;
2、在瀚高数据库中执行下述SQL:
create or replace function edit_distance_similarity(text,text) returns numeric as $$
declare
reault NUMERIC;
max_length numeric;
begin
if length($1) > length($2) then
max_length = length($1);
else max_length = length($2);
end if;
select round((1 - (levenshtein($1, $2) / max_length ::numeric)) * 100) into reault ;
return reault;
end;
$$ LANGUAGE plpgsql
3、使用:
select edit_distance_similarity('瀚高数据库','国产瀚高数据库第一');
报错编码
oracle的edit_distance_similarity
以上是关于兼容oracle的edit_distance_similarity 比较两个字符串相似度的主要内容,如果未能解决你的问题,请参考以下文章
解决方案 兼容 Oracle 和 MySQL for LIMIT 子句