Längste gemeinsame Zeichenkette ermitteln

Tommy57

Erfahrenes Mitglied
Hallo,

ich habe bei einer PostgreSQL Datenbank mehrere Strings, wo ich alle gegeneinander nach Übereinstimmungen prüfen will. Dabei möchte ich bei allen gerne die längste gemeinsame Zeichenkette haben.

Hat jemand eine Idee, wie man das machen könnte?

Gruß, Tommy
 
So, konnte das Problem selber lösen. Mein PostgreSQL ist nicht so gut. Über Optimierungen würde ich mich freuen :D

Code:
CREATE OR REPLACE FUNCTION commonSubstr(first_string text, second_string text, OUT common_substring text) RETURNS text AS
$BODY$
DECLARE
   maxI int;
   maxJ int;
   tmp_substring text;
   first_string_arr text[];
   second_string_arr text[];
BEGIN
   tmp_substring := '';
   common_substring := '';
   maxI := LENGTH(first_string);
   maxJ := LENGTH(second_string);
   first_string_arr := regexp_split_to_array(first_string, '');
   second_string_arr := regexp_split_to_array(second_string, '');
   
   FOR i IN 0 .. maxI LOOP
   
     FOR j IN 0 .. maxJ LOOP
       CASE
         WHEN first_string_arr[i] = second_string_arr[j] THEN
           tmp_substring := tmp_substring || second_string_arr[j];
           i := i + 1;
         ELSE
           CASE
             WHEN LENGTH(common_substring) < LENGTH(tmp_substring) THEN common_substring := tmp_substring;
             ELSE common_substring := common_substring;
           END CASE;
           tmp_substring := '';
       END CASE;
     END LOOP;
   END LOOP;
END
$BODY$
LANGUAGE 'plpgsql';


SELECT commonSubstr('Substantiv', 'Buchstaben');

Gruß, Tommy
 
Zurück