web-dev-qa-db-fra.com

Comment stocker des numéros de téléphone dans PostgreSQL?

Supposons que je souhaite stocker des numéros de téléphone dans une base de données. J'accepte les numéros de téléphone de l'extérieur des États-Unis. Comment pourrais-je stocker ces numéros de téléphone?

17
Evan Carroll

libphonenumber

Dans la mesure du possible, utilisez toujours la forme canonique. Plus la forme est normalisée, mieux c'est. S'il existe une norme, utilisez-la. Pour ce problème, utilisons Google libphonenumber , par proxy de pg-libphonenumber .

CREATE EXTENSION pg_libphonenumber;

Cela installe actuellement le phone_number type qui a des opérateurs de comparaison et des fonctions. Il stocke le nombre sous une forme canonique internationale. C'est le meilleur compromis à mon avis.

parse_phone_number('textnumber', 'CountryCode');

Parce que nous pouvons dire quand les numéros de téléphone sont égaux et que nous fournissons une forme normale interne, nous pouvons le faire.

SELECT parse_phone_number('03 7010 1234', 'AU') = parse_phone_number('(03) 7010 1234', 'AU');

(retourne vrai). Cela signifie également que DISTINCT fonctionne donc nous pouvons le faire pour obtenir l'effet que vous semblez vouloir ci-dessus.

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

Cela met ..

 parse_phone_number 
--------------------
 +61 3 7010 1234
(1 row)
23
Evan Carroll