Vamos supor que eu quero armazenar números de telefone em um banco de dados. Posso aceitar números de telefone de fora dos Estados Unidos. Como eu armazenaria esses números de telefone?
Vamos supor que eu quero armazenar números de telefone em um banco de dados. Posso aceitar números de telefone de fora dos Estados Unidos. Como eu armazenaria esses números de telefone?
Respostas:
libphonenumber
Sempre que possível, use sempre a forma canônica. Quanto mais normalizado o formulário, melhor. Se houver um padrão, use-o. Para esse problema, vamos usar o libphonenumber do Google , por proxy do pg-libphonenumber .
CREATE EXTENSION pg_libphonenumber;
Atualmente, instala o phone_number
tipo que possui operadores e funções de comparação. Ele armazena o número de forma canônica internacional. Este é o melhor compromisso na minha opinião.
parse_phone_number('textnumber', 'CountryCode');
Como sabemos quando os números de telefone são iguais e fornecemos uma forma normal interna, podemos fazer isso.
SELECT parse_phone_number('03 7010 1234', 'AU') = parse_phone_number('(03) 7010 1234', 'AU');
(retorna verdadeiro). Isso também significa que DISTINCT
funciona para que possamos fazer isso para obter o efeito que você deseja acima.
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
Isso coloca ..
parse_phone_number
--------------------
+61 3 7010 1234
(1 row)