使用oracle pl / sql从地址中删除重复的单词:
有两种类型的地址,下面是示例:
'3 Mayers Court 3 Mayers Court'
:地址中的单词总数是偶数,并且所有单词/单词组合都是重复的。预期产出:'3 Mayers Court'
'Manor House Manor'
或'1 Briar Cottages 1 Briar'
:其中地址中的单词总数不是奇数,因此有一个中间单词,左侧和右侧的所有单词/单词组合都是重复的。预期产出:'Manor House' or '1 Briar Cottages'
'The Old Millers Cottage Street Wood Annex Hall The Old Millers'
预期输出为:'Cottage Street Wood Annex Hall The Old Millers'
。这里有小屋,所以副本可以从左侧或右侧移除任何一个是正确的。
'The Old Millers Cottage Farm Street Wood Annex Hall The Old Millers'
预期输出为:'Cottage Farm Street Wood Annex Hall The Old'
。这里有小屋,所以副本可以从左侧或右侧移除任何一个是正确的。
我已经使用下面的附加代码解决了前两个示例,但是当我尝试使用相同的代码并测试示例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;