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


回答:


21

libphonenumber

可能な場合は、常に正規形を使用してください。フォームをより正規化すればするほど、より適切になります。標準がある場合は、それを使用します。この問題のために、pg-libphonenumberのプロキシにより、Googleの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)

8
残念ながら、パッケージは1年以上アルファ状態になっているようです。本番環境で使用する場合は、細心の注意を払ってください。
joanolo

2
@joanoloあなたは正しいですが、新しい貢献者、エヴァン・キャロルが今日ちょうど新しいコミットをしたようです...誰かがエヴァンの側でこの自己宣伝をすべて考慮するだろうが、私は彼が積極的であるので、この自己回答を支持しました...延長に貢献
ダリオ

3
ドキュメントに「貢献」しただけです。そして、私はこれをドキュメントを改善するためにいつもするのと同じ方法でこれを投稿する前にそうしました。私は有用な意味での「貢献者」ではありません。コミットビットがありません。私はC ++コードを書きません。私は、PgSQLでlibphonenumberをバインドすることに情熱を傾けています。
エヴァンキャロル

5
ドキュメントへの貢献が貢献しています。;)そして、この投稿のために、私の(安全で重要ではない)プロジェクトでlibphonenumberを使用します。ありがとうございました。
ダリオ

4
その価値のために、データベースに入る前にlibphonenumberを使用して番号を正規化します。この方法では、RDSで使用できないアルファ品質のpostgresプラグインに依存する必要はありません。その他のクラウドベースのpostgres展開。
ジョンハメリンク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.