Anggap saja saya ingin menyimpan nomor telepon dalam basis data. Saya dapat menerima nomor telepon dari luar Amerika Serikat. Bagaimana cara saya menyimpan nomor-nomor ini?
Anggap saja saya ingin menyimpan nomor telepon dalam basis data. Saya dapat menerima nomor telepon dari luar Amerika Serikat. Bagaimana cara saya menyimpan nomor-nomor ini?
Jawaban:
libphonenumber
Bila memungkinkan selalu gunakan bentuk kanonik. Semakin dinormalisasi bentuknya semakin baik. Jika ada standar, gunakan itu. Untuk masalah ini, mari gunakan Google libphonenumber , dengan proksi pg-libphonenumber .
CREATE EXTENSION pg_libphonenumber;
Saat ini menginstal phone_number
jenis yang memiliki operator perbandingan dan fungsi. Ini menyimpan nomor dalam bentuk kanonik internasional. Ini adalah kompromi terbaik menurut saya.
parse_phone_number('textnumber', 'CountryCode');
Karena kita dapat mengetahui kapan nomor telepon sama dan kita memberikan bentuk normal internal, kita dapat melakukan ini ..
SELECT parse_phone_number('03 7010 1234', 'AU') = parse_phone_number('(03) 7010 1234', 'AU');
(mengembalikan true). Ini juga berarti DISTINCT
bekerja sehingga kami dapat melakukan ini untuk mendapatkan efek yang Anda inginkan di atas.
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
Itu menempatkan ..
parse_phone_number
--------------------
+61 3 7010 1234
(1 row)