0
私はOracle関数をかなり新しく使用しています。Oracle PL/SQL - 2つの文字列間で一致する単語を特定して抽出する
COL_A
の文字列とCOL_B
の文字列を比較する関数を探していたら、文字列内の一致する単語がCOL_C
に出力されました。
COL_A = ‘Microsoft Office’
、COL_B = ‘Windows Microsoft’
、従ってCOL_C
に予想される結果は、したがってCOL_C
で 予想結果が‘Microsoft Office’
COL_A = ‘Microsoft Office’
、COL_B = ‘Microsoft Windows'
、従って 期待される結果になるであろう‘Microsoft’
COL_A = ‘Microsoft Office’
、COL_B = ‘Microsoft Office’
、あろうCOL_C
は‘Microsoft’
COL_A = ‘Microsoft Office’
、COL_B = ‘Outlook’
、したがって、COL_C
で期待 結果がNULL
だろう私は、要件(Count sequential matching words in two strings oracle)が、しかし、この関数は一致する単語の数を出力し、ほぼ満たす機能を見つけたと分類のみ(私の目的のために、順序は無関係であり、理想的には表示される一致する単語が好きです)。
CREATE OR REPLACE FUNCTION STR_WORD_MATCH(
P_STR1 IN VARCHAR2,
P_STR2 IN VARCHAR2)
RETURN NUMBER
IS
L_STR1 VARCHAR2(4000) := P_STR1;
L_STR2 VARCHAR2(4000) := P_STR2;
L_RES NUMBER DEFAULT 0;
L_DEL_POS1 NUMBER;
L_DEL_POS2 NUMBER;
L_WORD1 VARCHAR2(1000);
L_WORD2 VARCHAR2(1000);
BEGIN
LOOP
L_DEL_POS1 := INSTR(L_STR1,' ');
L_DEL_POS2 := INSTR(L_STR2,' ');
CASE L_DEL_POS1
WHEN 0 THEN
L_WORD1 := L_STR1;
L_STR1 := '';
ELSE
L_WORD1 := SUBSTR(L_STR1,1,L_DEL_POS1 - 1);
END CASE;
CASE L_DEL_POS2
WHEN 0 THEN
L_WORD2 := L_STR2;
L_STR2 := '';
ELSE
L_WORD2 := SUBSTR(L_STR2,1,L_DEL_POS2 - 1);
END CASE;
EXIT
WHEN (L_WORD1 <> L_WORD2) OR ((L_WORD1 IS NULL) OR (L_WORD2 IS NULL));
L_RES := L_RES + 1;
L_STR1 := SUBSTR(L_STR1,L_DEL_POS1 + 1);
L_STR2 := SUBSTR(L_STR2,L_DEL_POS2 + 1);
END LOOP;
RETURN L_RES;
END;
いつもどんな助けでも大歓迎です。