電話番号をデータベースに保存したいとします。米国外からの電話番号を受け入れる場合があります。これらの電話番号を保存するにはどうすればよいですか?
libphonenumber
可能な場合は常に正規形を使用してください。フォームをより正規化するほど良いです。標準がある場合は、それを使用してください。この問題では、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');
(trueを返します)。これは、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)