1. 程式人生 > >【絕對原創,網際網路上除了這裡肯定是沒有的】oracle字串匹配度函式

【絕對原創,網際網路上除了這裡肯定是沒有的】oracle字串匹配度函式

自己寫的函式,網際網路上肯定是沒有的,本人經常資料轉換,這個函式用的比較多,大家參考,留著也不能產生經濟效益,就分享出來啦  ,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; /