หากเป็นไปได้ควรใช้แบบฟอร์มมาตรฐาน ยิ่งรูปแบบปกติมากเท่าไหร่ก็ยิ่งดีเท่านั้น หากมีมาตรฐานให้ใช้ สำหรับปัญหานี้ขอใช้ของ Google libphonenumberโดยพร็อกซี่ของPG-libphonenumber
CREATE EXTENSION pg_libphonenumber;
ปัจจุบันนี้ติดตั้งphone_number
ชนิดที่มีตัวดำเนินการเปรียบเทียบและฟังก์ชัน มันเก็บหมายเลขในรูปแบบบัญญัติสากล นี่คือการประนีประนอมที่ดีที่สุดในความคิดของฉัน
parse_phone_number('textnumber', 'CountryCode');
เพราะเราสามารถบอกได้ว่าเมื่อใดที่หมายเลขโทรศัพท์เท่ากันและเราจัดให้มีรูปแบบปกติภายในเราสามารถทำได้ ..
SELECT parse_phone_number('03 7010 1234', 'AU') = parse_phone_number('(03) 7010 1234', 'AU');
(ส่งคืนจริง) นอกจากนี้ยังหมายถึงการใช้DISTINCT
งานเพื่อให้เราสามารถทำสิ่งนี้เพื่อให้ได้ผลตามที่คุณต้องการ
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
นั่นแหละค่ะ
parse_phone_number
--------------------
+61 3 7010 1234
(1 row)