web-dev-qa-db-ja.com

PostgreSQLに電話番号を保存するにはどうすればよいですか?

電話番号をデータベースに保存したいとします。米国外からの電話番号を受け入れる場合があります。これらの電話番号を保存するにはどうすればよいですか?

17
Evan Carroll

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)
23
Evan Carroll