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:
libphonenumberMü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_numberkarşı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, DISTINCTyukarı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)