Telefon numaralarını PostgreSQL'de nasıl saklarım?


Yanıtlar:


22

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_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)

8
Ne yazık ki, paket 1 yıldan fazla bir süredir alfa durumunda görünüyor ... Üretimde kullanmaya çalışırsanız yüksek özen gösterilmektedir.
joanolo

2
@joanolo Haklısınız, ancak görünüşe göre yeni bir katkıda bulunan Evan Carroll, bugün yeni bir taahhütte bulundu ... Birisi Evan adına kendi kendini tanıtmayı düşünecekti ama ben de bu öz-cevabı iptal ettim çünkü aktif olarak uzantısı ... katkıda
Dario

3
Belgelere sadece "katkıda bulundum". Ve bunu aynı şekilde göndermeden önce yaptım, her zaman belgeleri geliştirmek için yapıyorum. Herhangi bir anlamda “katkıda bulunan” değilim. Taahhüt bitim yok. C ++ kodu yazmıyorum. Ben sadece PgSQL ve diğerleri hakkında bilen ve nasıl kullanılacağını bilmek libphonenumber bağlayıcı olan tutkulu.
Evan Carroll

5
Belgelere katkıda bulunmak katkıda bulunuyor. ;) Ve bu yazı nedeniyle libphonenumber'ı (güvenli, kritik olmayan) bir projemde kullanacağım. Teşekkür ederim.
Dario

4
Değeri için, veritabanına girmeden önce sayıyı normalleştirmek için libphonenumber kullanıyoruz - bu şekilde RDS'de kullanılamayan alfa kalitesinde postgres eklentilerine bağımlı olmamız gerekmiyor ve diğer bulut tabanlı postgres dağıtımları.
John Hamelink
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.