Telefon numaralarını bir veritabanında saklamak istediğimi varsayalım. ABD dışından telefon numaralarını kabul edebilirim. Bu telefon numaralarını nasıl saklayabilirim?
Telefon numaralarını bir veritabanında saklamak istediğimi varsayalım. ABD dışından telefon numaralarını kabul edebilirim. Bu telefon numaralarını nasıl saklayabilirim?
Yanıtlar:
libphonenumber
Mümkünse her zaman kanonik formu kullanın. Form ne kadar normalleşirse o kadar iyidir. Bir standart varsa kullanın. Bu sorun için, pg-libphonenumber proxy'siyle Google'ın libphonenumber'ı kullanalım .
CREATE EXTENSION pg_libphonenumber;
Bu, şu anda phone_number
karşılaştırma işleçleri ve işlevleri olan türü yükler . Numarayı uluslararası kanonik bir biçimde saklar. Bence bu en iyi uzlaşma.
parse_phone_number('textnumber', 'CountryCode');
Telefon numaralarının birbirine ne zaman eşit olduğunu söyleyebileceğimiz ve dahili bir normal form sağladığımız için bunu yapabiliriz.
SELECT parse_phone_number('03 7010 1234', 'AU') = parse_phone_number('(03) 7010 1234', 'AU');
(true değerini döndürür). Bu aynı zamanda, DISTINCT
yukarıda istediğiniz gibi görünen etkiyi elde etmek için yapabileceğimiz anlamına gelir .
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
Bu koyar ..
parse_phone_number
--------------------
+61 3 7010 1234
(1 row)