自己写的函数,互联网上肯定是没有的,本人经常数据转换,这个函数用的比较多,大家参考,留着也不能产生经济效益,就分享出来啦 ,oracle10以上才有正则匹配函数
例子:
y varchar2(50):='西宁市社会事业保险管理局';
zd varchar2(50):='西宁市社保局';
result:=0.5
y varchar2(50):='西宁市社保局';
zd varchar2(50):='西宁市社会事业保险管理局';
result:=1
使用场景:
select * from xxxxx where Fun_Likepersent(field1,field2)>0.5 匹配度大于50%
select * from xxxxx where Fun_Likepersent(field1,field2)=1 完全包含在内
函数代码:
CREATE OR REPLACE FUNCTION Fun_Likepersent(Str1 IN VARCHAR2,
Str2 IN VARCHAR2) RETURN NUMBER IS
RESULT NUMBER;
Msg VARCHAR2(1000);
BEGIN
SELECT (Length(Str1) - Nvl(Length(Regexp_Replace(Str1,
'[' || Regexp_Replace(Str2,
'[-*\\]') || ']')),
0)) / Length(Str1)
INTO RESULT
FROM Dual;
RETURN(Round(RESULT,
1));
EXCEPTION
WHEN OTHERS THEN
NULL;
Msg := SQLERRM;
RESULT := 0;
END Fun_Likepersent;
/