Standardisace telefonního čísla

Z PostgreSQL
Verze z 18. 6. 2009, 13:21, kterou vytvořil imported>Pavel (Nová stránka: <pre> CREATE OR REPLACE FUNCTION "_global_"."getphonenumber" (pphonenum varchar) RETURNS varchar AS $body$ declare ltmp varchar; BEGIN ltmp := lower(pphonenum); -- otestovani, zd...)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaci Skočit na vyhledávání
CREATE OR REPLACE FUNCTION "_global_"."getphonenumber" (pphonenum varchar) RETURNS varchar AS
$body$
declare ltmp varchar;
BEGIN
   ltmp := lower(pphonenum);

-- otestovani, zda-li neni telefonnich cisel vic, oddelenych carkou
   If position(',' in ltmp) > 0 then
   -- pokud ano, vezmeme jen prvni
      ltmp := substr(ltmp,1,position(',' in ltmp)-1);
   END if;
   
   -- zrusime mezery
   ltmp := replace(ltmp, ' ', '');
   --vyfiltrujeme pouze cifry a +
   ltmp := regexp_replace(ltmp, E'([^[:digit:]\+])', '','gi');
   --pokud telefon zacina na 00420 prepiseme na +420
   ltmp := regexp_replace(ltmp, '^00420', '+420');
   --totez pro slovensko
   ltmp := regexp_replace(ltmp, '^00421', '+421');
   --pokud zacina jen 420 pridame +
   ltmp := regexp_replace(ltmp, '^420', '+420');
   --totez pro slovensko
   ltmp := regexp_replace(ltmp, '^421', '+421');
   --pokud nejaky slovak pridal rpedvolbu mesta za predvolbu zeme, odstranime prebyvajici 0
   ltmp := regexp_replace(ltmp, E'^\\+4210', '+421');

   --pokud zacina cislo 00 predelame na +
   ltmp := regexp_replace(ltmp, '^00', '+');
   --pokud nyni zacina na 0 odstranime ji (pozustatek predvoleb s 0 z minulosti
   ltmp := regexp_replace(ltmp, '^0', '');

   -- pokud nyni cislo nezacina + a ma jen 9 znaku, pridame +420 pro cechy
   if (substr(ltmp, 1, 1) != '+') and (length(ltmp) = 9) then
     ltmp := '+420' || ltmp;
   end if;
   
   -- pokud cislo zacina na +420 a nema 13 znaku, nepovedlo se standarizovat a vysledek smazeme
   if (substr(ltmp, 1, 4) = '+420') and (length(ltmp) != 13) then
     ltmp := '';
   end if;
   
   --pokud je delka mensi nez 9 nebo naopak vetsi nez 15, radeji vysledek smazeme
   if (length(ltmp) < 9) or (length(ltmp) > 15) then
     ltmp := '';
   end if;
   return ltmp; 
END;
$body$
LANGUAGE 'plpgsql' IMMUTABLE CALLED ON NULL INPUT SECURITY DEFINER;
CREATE OR REPLACE FUNCTION "_global_"."is_czechmobilephone" (pphonenum varchar) RETURNS boolean AS
$body$
declare polepredvoleb varchar[];
        predvolby varchar = '601,602,603,604,605,606,607,608,720,721,722,723,724,725,726,727,728,729,730,7311,732,733,734,735,736,737,738,739,773,774,775,776,777';
        res boolean;
BEGIN
   select 
   into res
   count(pv) > 0
   
   from
   _global_.unnest(string_to_array(predvolby,',')) pv
   WHERE
   substr(pphonenum,1,7) = '+420'||pv;
   return res;
END;
$body$
LANGUAGE 'plpgsql' IMMUTABLE RETURNS NULL ON NULL INPUT SECURITY DEFINER;
CREATE OR REPLACE FUNCTION "_global_"."getmobilephone" (pphonenum varchar) RETURNS varchar AS
$body$
BEGIN
   if _global_.is_czechmobilephone(pphonenum) then
     return pphonenum;
   else
     return '';
   end if;
END;
$body$
LANGUAGE 'plpgsql' IMMUTABLE RETURNS NULL ON NULL INPUT SECURITY DEFINER;

Raul 23. 4. 2009, 17:00 (UTC)