Standardisace telefonního čísla
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)