Normalisieren von Telefon-Nummern unter Postgres

Manchmal kann es sinnvoll sein, die Telefonnummern in einer Tabelle zu normalieren, d.h. ohne schmückendes Beiwerk wie Trennungs- oder Leerzeichen darzustellen. Anwendungsbeispiele sind z.B. die Anruferkennung bei einer CTI-Anwendung oder die Suche nach Telefonnummer-Dubletten, die sich nur durch unterschiedliche Trennzeichen-Syntax unterscheiden.

Die folgende PL/SQL – Funktion liefert nur die Ziffern einer übergebenen Zeichenfolge zurück:

CREATE FUNCTION telnr_extract(character varying) RETURNS text
    AS '
DECLARE
    i INTEGER;
    telnr  VARCHAR;
    laenge INTEGER;
    buchst VARCHAR;
    buchst_asc INTEGER;
    save   VARCHAR;
BEGIN
    laenge := length($1);
    telnr := '''';
    IF laenge > 0 THEN
FOR i IN 1 .. laenge LOOP
    buchst := substring($1 from i for 1);
    buchst_asc := ascii(buchst);
    IF buchst_asc >= 48 AND buchst_asc <= 57 THEN
telnr := textcat(telnr,buchst);
    END IF;
END LOOP;
    END IF;
    RETURN telnr;
END;
'
    LANGUAGE plpgsql;