porovnavani retezcu

Jan Serak sherry na pikebo.cz
Čtvrtek Květen 22 13:15:49 CEST 2003


Vladimir Naprstek wrote:
> Zdravim,
> potrebuji nejak elegantne porovnat dva retezce a zjistit v kolika 
> znacich se lisi. Nikoliv delkou, ale na pozicich, napr. "Karel" a 
> "karek" se lisi 2 znaky). Porovnavat znaky jeden po druhem mi prijde 
> dosti tezkopadne.
> Jo a bude to delat procedura v oracle (8i).
> 
> Nejaky napad?

Obavam se, ze bud to budete muset ziterovat znak po znaku. Muzete to 
zkusit nejakou dobre napsanou rekurzivni funkci,

FUNCTION vzdalenost (jedna varchar2,dva varchar2) RETURN integer IS
   pulka integer;
BEGIN
   IF jedna=dva THEN return(0);
   ELSE
     pulka:=floor(length(jedna)/2);
     return(
       vzdalenost(substr(jedna,1,pulka),substr(dva,1,pulka))
       +
       vzdalenost(substr(jedna,pulka+1),substr(dva,pulka+1))
     );
   END IF;
END;

Bohuzel, jak znam PL/SQL, tak rezie interpretace takoveto funkce bude 
mnohem vyssi, nez uspora v usetrenych porovnavanich. Ale pokud budete 
srovnavat retezce "straslive podobne" (rozdilny bude nejvyse kazdy 
desaty znak), tak by to mohlo byt zajimave srovnat.


							Jan Serak

DISCLAIMER
----------

PL/SQL kod obsazeny v tomto dopise je pouze ideove-instruktazni, autor 
nezarucuje ani uspesne zparsovani ;-)



Další informace o konferenci Test