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


Réponses:


21

libphonenumber

Si 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 le libphonenumber de Google , par proxy de pg-libphonenumber .

CREATE EXTENSION pg_libphonenumber;

Ceci installe actuellement le phone_numbertype qui a des opérateurs et des fonctions de comparaison. 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 cela DISTINCTfonctionne afin que nous puissions 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)

8
Malheureusement, le paquet semble être en état alpha depuis plus d'un an ... Attention élevée recommandée si vous essayez de l'utiliser en production.
joanolo

2
@joanolo Vous avez raison, mais il semble qu'un nouveau contributeur, Evan Carroll, ait fait un nouvel engagement juste aujourd'hui ... contribuant à l'extension ...
Dario

3
J'ai seulement "contribué" à la documentation. Et, je l'ai fait avant de poster ceci de la même manière que je fais toujours pour améliorer la documentation. Je ne suis pas un "contributeur", dans un sens utile. Je n'ai pas de bit de validation. Je n'écris pas de code C ++. Je suis juste passionné par la liaison de libphonenumber dans PgSQL et par d'autres personnes les connaissant et comment les utiliser.
Evan Carroll,

5
Contribuer à la documentation, c'est contribuer. ;) Et je vais utiliser libphonenumber dans un de mes projets (sûrs et non critiques) à cause de ce post. Je vous remercie.
Dario

4
Pour ce que cela vaut, nous utilisons libphonenumber pour normaliser le nombre avant qu'il n'entre dans la base de données - de cette façon, nous n'avons pas besoin de dépendre (au moment de la rédaction) de plugins postgres de qualité alpha qui ne peuvent pas être utilisés dans RDS et d'autres déploiements postgres basés sur le cloud.
John Hamelink
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.