我试图理解这个正则表达式函数的含义,它的目的是在select语句中。
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;
//在此select语句中调用REPS_MTCH函数。 select语句用于将Temp表名中的名称与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函数的用途是什么?
答案 0 :(得分: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;
我只是删除了额外的替换操作,不必要的小写字母a-z和正则表达式字符类中的额外管道(|)字符。
JARO_WINKLER_SIMILARITY
函数只计算0的分数,与剩余的字母数字和管道字符的100个相同。如果您想了解更多相关信息,可以查看Jaro Winkler distances上的维基百科条目。