如何从oracle pl / SQL中的列中删除重复的单词

时间:2018-04-13 07:14:52

标签: oracle plsql

使用oracle pl / sql从地址中删除重复的单词:

有两种类型的地址,下面是示例:

  1. '3 Mayers Court 3 Mayers Court':地址中的单词总数是偶数,并且所有单词/单词组合都是重复的。预期产出:'3 Mayers Court'

  2. 'Manor House Manor''1 Briar Cottages 1 Briar':其中地址中的单词总数不是奇数,因此有一个中间单词,左侧和右侧的所有单词/单词组合都是重复的。预期产出:'Manor House' or '1 Briar Cottages'

  3. 'The Old Millers Cottage Street Wood Annex Hall The Old Millers'预期输出为:'Cottage Street Wood Annex Hall The Old Millers'。这里有小屋,所以副本可以从左侧或右侧移除任何一个是正确的。

  4. 'The Old Millers Cottage Farm Street Wood Annex Hall The Old Millers'预期输出为:'Cottage Farm Street Wood Annex Hall The Old'。这里有小屋,所以副本可以从左侧或右侧移除任何一个是正确的。

  5. 我已经使用下面的附加代码解决了前两个示例,但是当我尝试使用相同的代码并测试示例3和4时,它无法正常工作。我已被指示通过PL / SQL匿名块或通过函数执行此操作。任何帮助将不胜感激。

    我的代码:

       CREATE OR REPLACE FUNCTION FN_ADD_CLEANUP(ADD_IN IN VARCHAR2)
    RETURN VARCHAR2 IS
       NO_SPACES NUMBER;
       F_ADD VARCHAR2(255);
       T_ADD VARCHAR2(255);
       ADD_OUT VARCHAR2(255);
    
    BEGIN
    
    -- INITIALIZING THE PARAMETER VALUE
    SELECT LTRIM(RTRIM(ADD_IN)) INTO F_ADD FROM DUAL;
    
    -- SET NO OF SPACES
    SELECT REGEXP_COUNT(F_ADD, ' ') INTO NO_SPACES FROM DUAL;
    
    -- TRIMED STRING
    SELECT TRIM(SUBSTR(F_ADD, INSTR(F_ADD, ' ', 1, NO_SPACES/2 + 1))) INTO T_ADD FROM DUAL;
    
    -- RESULT
    ADD_OUT :=  CASE WHEN F_ADD LIKE T_ADD||'%'
                     THEN SUBSTR(F_ADD, 1, LENGTH(F_ADD) - LENGTH(T_ADD))
                     ELSE F_ADD
                END;
    
    RETURN ADD_OUT;
    
    END;
    

0 个答案:

没有答案