Angenommen, ich möchte Telefonnummern in einer Datenbank speichern. Ich akzeptiere möglicherweise Telefonnummern von außerhalb der USA. Wie würde ich vorgehen, um diese Telefonnummern zu speichern?
Angenommen, ich möchte Telefonnummern in einer Datenbank speichern. Ich akzeptiere möglicherweise Telefonnummern von außerhalb der USA. Wie würde ich vorgehen, um diese Telefonnummern zu speichern?
Antworten:
libphonenumber
Verwenden Sie nach Möglichkeit immer die kanonische Form. Je normaler die Form, desto besser. Wenn es einen Standard gibt, verwenden Sie ihn. Verwenden wir für dieses Problem Googles libphonenumber als Proxy von pg-libphonenumber .
CREATE EXTENSION pg_libphonenumber;
Dies installiert derzeit den phone_number
Typ, der Vergleichsoperatoren und -funktionen hat. Es speichert die Nummer in einer internationalen kanonischen Form. Dies ist meiner Meinung nach der beste Kompromiss.
parse_phone_number('textnumber', 'CountryCode');
Da wir feststellen können, wann die Telefonnummern einander entsprechen und wir eine interne Normalform bereitstellen, können wir dies tun.
SELECT parse_phone_number('03 7010 1234', 'AU') = parse_phone_number('(03) 7010 1234', 'AU');
(gibt true zurück). Dies bedeutet auch, dass dies DISTINCT
funktioniert, damit wir den gewünschten Effekt erzielen.
CREATE TABLE foo
AS
SELECT DISTINCT parse_phone_number(ph, 'AU')
FROM ( VALUES
('0370101234'),
('03 7010 1234'),
('(03) 7010 1234')
) AS t(ph);
SELECT 1
Das setzt in ..
parse_phone_number
--------------------
+61 3 7010 1234
(1 row)