SQL正则表达式函数

时间:2015-09-02 13:57:16

标签: sql regex oracle

我试图理解这个正则表达式函数的含义,它的目的是在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函数的用途是什么?

1 个答案:

答案 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上的维基百科条目。