Supongamos que quiero almacenar números de teléfono en una base de datos. Puedo aceptar números de teléfono de fuera de los Estados Unidos. ¿Cómo haría para almacenar estos números de teléfono?
Supongamos que quiero almacenar números de teléfono en una base de datos. Puedo aceptar números de teléfono de fuera de los Estados Unidos. ¿Cómo haría para almacenar estos números de teléfono?
Respuestas:
libphonenumber
Cuando sea posible, use siempre la forma canónica. Cuanto más normalizada sea la forma, mejor. Si hay un estándar, úselo. Para este problema, usemos el número de libphonen de Google , por proxy de pg-libphonenumber .
CREATE EXTENSION pg_libphonenumber;
Esto instala actualmente el phone_number
tipo que tiene operadores y funciones de comparación. Almacena el número en forma canónica internacional. Este es el mejor compromiso en mi opinión.
parse_phone_number('textnumber', 'CountryCode');
Como podemos saber cuándo los números de teléfono son iguales y proporcionamos una forma normal interna, podemos hacer esto.
SELECT parse_phone_number('03 7010 1234', 'AU') = parse_phone_number('(03) 7010 1234', 'AU');
(devuelve verdadero). Esto también significa que DISTINCT
funciona para que podamos hacer esto para obtener el efecto que parece querer más arriba.
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
Eso pone en ..
parse_phone_number
--------------------
+61 3 7010 1234
(1 row)