Come posso memorizzare i numeri di telefono in PostgreSQL?


Risposte:


21

libphonenumber

Quando possibile, usa sempre la forma canonica. Più la forma è normalizzata, meglio è. Se esiste uno standard, usalo. Per questo problema, usiamo il libphonenumber di Google , tramite proxy di pg-libphonenumber .

CREATE EXTENSION pg_libphonenumber;

Questo attualmente installa il phone_numbertipo che ha operatori e funzioni di confronto. Memorizza il numero in una forma canonica internazionale. Questo è il miglior compromesso secondo me.

parse_phone_number('textnumber', 'CountryCode');

Perché possiamo dire quando i numeri di telefono sono uguali tra loro e forniamo un modulo normale interno, possiamo farlo.

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

(restituisce vero). Questo significa anche che DISTINCTfunziona, quindi possiamo farlo per ottenere l'effetto che sembra voler sopra.

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

Questo mette ..

 parse_phone_number 
--------------------
 +61 3 7010 1234
(1 row)

8
Sfortunatamente, il pacchetto sembra essere in stato alfa per più di 1 anno ... Si consiglia di fare molta attenzione se si tenta di utilizzarlo in produzione.
joanolo,

2
@joanolo Hai ragione, ma sembra che un nuovo collaboratore, Evan Carroll, abbia assunto un nuovo impegno proprio oggi ... Qualcuno prenderebbe in considerazione tutta questa auto-promozione da parte di Evan, ma ho votato a favore di questa risposta anche perché è attivamente contribuendo all'estensione ...
Dario,

3
Ho solo "contribuito" alla documentazione. E l'ho fatto prima di pubblicarlo nello stesso modo che faccio sempre per migliorare la documentazione. Non sono un "collaboratore", in alcun senso utile. Non ho un po 'di commit. Non scrivo codice C ++. Sono solo appassionato di avere l'associazione libphonenumber in PgSQL e altri sanno di loro e di come usarli.
Evan Carroll,

5
Contribuire alla documentazione sta contribuendo. ;) E userò libphonenumber in un mio progetto (sicuro, non critico) a causa di questo post. Grazie.
Dario,

4
Per quello che vale, usiamo libphonenumber per normalizzare il numero prima che entri nel database - in questo modo non abbiamo bisogno di dipendere da (al momento della stesura) plugin postgres di qualità alfa che non possono essere usati in RDS e altre implementazioni postgres basate su cloud.
John Hamelink,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.