Làm cách nào để lưu trữ số điện thoại trong PostgreSQL?


Câu trả lời:


21

libphonenumber

Khi có thể luôn luôn sử dụng các hình thức kinh điển. Hình thức càng bình thường càng tốt. Nếu có một tiêu chuẩn, sử dụng nó. Đối với vấn đề này, hãy sử dụng libphonenumber của Google , theo proxy của pg-libphonenumber .

CREATE EXTENSION pg_libphonenumber;

Điều này hiện đang cài đặt phone_numberloại có các toán tử so sánh và chức năng. Nó lưu số trong một hình thức kinh điển quốc tế. Đây là sự thỏa hiệp tốt nhất theo ý kiến ​​của tôi.

parse_phone_number('textnumber', 'CountryCode');

Bởi vì chúng tôi có thể biết khi nào các số điện thoại bằng nhau và chúng tôi cung cấp một hình thức bình thường nội bộ, chúng tôi có thể làm điều này ..

SELECT parse_phone_number('03 7010 1234', 'AU') = parse_phone_number('(03) 7010 1234', 'AU');

(trả về đúng). Điều này cũng có nghĩa là nó DISTINCThoạt động để chúng tôi có thể làm điều này để có được hiệu ứng mà bạn muốn ở trên.

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

Điều đó đặt vào ..

 parse_phone_number 
--------------------
 +61 3 7010 1234
(1 row)

8
Thật không may, gói dường như ở trạng thái alpha trong hơn 1 năm ... Khuyến cáo cao nếu bạn cố gắng sử dụng nó trong sản xuất.
joanolo

2
@joanolo Bạn nói đúng, nhưng có vẻ như một người đóng góp mới, Evan Carroll, đã đưa ra một cam kết mới ngay hôm nay ... Ai đó sẽ xem xét tất cả sự tự quảng cáo này về phía Evan nhưng tôi cũng ủng hộ việc tự trả lời này vì anh ấy đang tích cực góp phần mở rộng ...
Dario

3
Tôi chỉ "đóng góp" vào tài liệu. Và, tôi đã làm như vậy trước khi tôi đăng bài này theo cùng một cách tôi luôn làm để cải thiện tài liệu. Tôi không phải là "người đóng góp", theo bất kỳ ý nghĩa hữu ích nào. Tôi không có một chút cam kết. Tôi không viết mã C ++. Tôi chỉ đam mê về việc ràng buộc libphonenumber trong PGQuery và những người khác biết về chúng và cách sử dụng chúng.
Evan Carroll

5
Đóng góp cho các tài liệu được đóng góp. ;) Và tôi sẽ sử dụng libphonenumber trong một dự án (an toàn, không quan trọng) của tôi vì bài đăng này. Cảm ơn bạn.
Dario

4
Để biết giá trị của nó, chúng tôi sử dụng libphonenumber để bình thường hóa số trước khi vào cơ sở dữ liệu - theo cách đó chúng tôi không cần phải phụ thuộc vào (tại thời điểm viết) các plugin postgres chất lượng alpha không thể sử dụng trong RDS và các triển khai postgres dựa trên đám mây khác.
John Hamelink
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.