Der Martin: Telefonnummern in Adressdatenbank

Beitrag lesen

Hallo Rolf,

Das Problem, ob Du eine nationale Nummer (015735499117) oder eine internationale Nummer (0015735499117 oder +15735499117) hast, wird dadurch nicht behoben und es ist auch nicht so einfach behebbar. Man kann das mit einem CASE-Ausdruck angehen, aber das ist kompliziert.

CASE 
WHEN SUBSTR(nummer, 1, 2) = '00' THEN nummer
WHEN SUBSTR(nummer, 1, 1) = '+' THEN CONCAT('00', SUBSTR(nummer,2))
WHEN SUBSTR(nummer, 1, 1) = '0' THEN CONCAT('0049', SUBSTR(nummer,2)
ELSE '???'
END

so normalisierst du auf zwei führende Nullen und setzt außerdem voraus, dass eine Nummer, die mit nur einer Null beginnt, eine Nummer in Deutschland ist. Beides nicht gut.

Das Präfix für eine internationale Rufnummer ist in vielen Ländern, aber nicht überall die Doppel-Null. In den USA ist es meines Wissens die 010, in Österreich 09. Deswegen gilt nach internationalem Standard (irgendein ISO) das Pluszeichen als Ersatzzeichen für das im jeweiligen Land übliche Präfix.

Und im Code die 49 als Default-Ländervorwahl hartcodieren ist auch nicht schön. Wer weiß, ob derselbe Code nicht auch mal in Polen oder in Luxemburg laufen soll. Also besser als Config-Parameter.

Diese Case-Operation würde 00-Nummern unverändert lassen, aus +49... eine 0049-Nummer machen und nationale Nummern (0157354...) zu 0049157354 internationalisieren.

Eben. Und das ist nur richtig, solange diese Abfrage in DE stattfindet.

Live long and pros healthy,
 Martin

--
Hunde, die bellen, beißen nicht.
Jedenfalls nicht gleichzeitig.