Supponiamo di voler memorizzare i numeri di telefono in un database. Potrei accettare numeri di telefono al di fuori degli Stati Uniti. Come farei per memorizzare questi numeri di telefono?
Supponiamo di voler memorizzare i numeri di telefono in un database. Potrei accettare numeri di telefono al di fuori degli Stati Uniti. Come farei per memorizzare questi numeri di telefono?
Risposte:
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_number
tipo 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 DISTINCT
funziona, 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)