2015-09-02 48 views
0

我想了解這個正則表達式函數的含義和它在select語句中的用途。SQL正則表達式函數

create or replace FUNCTION REPS_MTCH(string_orig IN VARCHAR2 , string_new IN VARCHAR2, score IN NUMBER) 
RETURN PLS_INTEGER AS 
BEGIN 
    IF string_orig IS NULL AND string_new IS NULL THEN 
    RETURN 0; 

    ELSIF utl_match.jaro_winkler_similarity(replace(REGEXP_REPLACE(UPPER(string_orig), '[^a-z|A-Z|0-9]+', ''),' ',''),replace(REGEXP_REPLACE(UPPER(string_new), '[^a-z|A-Z|0-9]+', ''),' ','')) >= score THEN 
    RETURN 1; 

    ELSE 
     RETURN 0; 
    END IF; 

//該REPS_MTCH函數被調用這個select語句。 select語句將在臨時表名稱中將REPS_MTCH_D_STDNT_TMP中的名稱與名爲REPS_MTCH_D_STDNT_MSTR的主表中的名稱進行匹配。這個select語句中REPS_MTCH函數的用途是什麼?

SELECT 
    REPS_MTCH(REPS_MTCH_D_STDNT_TMP.FIRST_NAME,REPS_MTCH_D_STDNT_MSTR.FIRST_NAME,85) AS first_match_score, 

這個select語句中REPS_MTCH函數的用途是什麼?

+2

MySQL,SQL Server和Oracle是不同的產品,具有不同的SQL和功能。你使用哪一個? – jarlh

+0

@jarlh是一個oracle數據庫,但我們使用蟾蜍作爲編輯器 – Bright

+0

我不確定你在問什麼。在進行比較之前,'regexp_replace'調用簡單地消除了不是字母數字的任何內容。所以字符串「F.o.o.B.a.r」將與字符串「FooBar」100%匹配。 'jaro_winkler_similarity'函數使用Jaro-Winkler相似度算法來估計兩個字符串的匹配程度。 「Justin」與「Justine」非常相似,但與「Bright」非常不同。 –

回答

0

在上述函數中,REGEXP_REPLACE將刪除所有出現的任何非字母數字或管道(|)字符。在此之後,REGEXP_REPLACE也包含在對正則REPLACE函數的冗餘調用中,該函數僅刪除已由REGEXP_REPLACE調用刪除的空格。該試驗可以按如下被重寫,並且仍然表現的相同,因爲發生之前的替換操作的輸入是第一UPPER套管:

ELSIF utl_match.jaro_winkler_similarity(
      REGEXP_REPLACE(UPPER(string_orig), '[^A-Z|0-9]+', '') 
     ,REGEXP_REPLACE(UPPER(string_new) , '[^A-Z|0-9]+', '') 
    ) >= score 
THEN RETURN 1; 

我簡單地去除多餘的替換操作時,不必要的下殼體AZ和額外的管( |)字符從正則表達式的字符類。

JARO_WINKLER_SIMILARITY函數只是計算0的分數,不像其他字母數字和管道字符的100相同。如果你想了解更多關於它們的信息,你可以查看Jaro Winkler distances上的維基百科條目。

+0

我很感謝你的答案,現在它是有道理的。我將更多地瞭解jaro Wrinkler距離。謝謝 – Bright