0

データベースで電話番号を検索する必要があります。
ただし、電話番号がデータベースにどのように保存されているかはわかりません。これは、次のようにさまざまな方法で可能です。

  0123456789 
  012 3456789 
  012 34 56 78 9 
  012-3456789

私が探す必要がある文字列は、常に次のようにフォーマットされています

 0123456789

私のクエリは次のようになります。

SELECT * FROM account WHERE phonenumber = '0123456789'

ただし、これはもちろん、電話番号が検索文字列のようにフォーマットされている場合にのみ機能します。
他の関数の正規表現を使用して、あらゆる種類のフォーマットされた電話番号を検索するにはどうすればよいですか?

4

2 に答える 2

0

MySql で REGEXP を実行することは可能ですが、それは非常に確実な解決策ではなく、式の調整が難しいと思います。

SELECT * FROM account WHERE phonenumber REGEXP '^([0-9]{1}( |-|)){9}[0-9]{1}$'

式をテストするための優れたツールは、次のサイトです: http://www.spaweditor.com/scripts/regex/index.php

秘訣は、データベースに入力する前にデータを正規化することです。これは、電話番号から数字以外の文字をすべて取り除くことを意味します。

テーブルにすでにある数値も修正する必要があります。

最善の方法は、正規化されたデータを保存することです。つまり、国 + 地域 + 番号を個別に保存します。

于 2013-04-04T11:38:10.627 に答える
0

Use Mysql REGEXP. This is a basic example of how You can achieve that. Works with every number format in Your example. Think of better regexp to be more precise.

SELECT * FROM account WHERE phonenumber REGEXP '012( |-|)34( |)56( |)78( |)9';
于 2013-04-04T11:38:40.880 に答える