2

次のクエリを使用して、テーブルから重複する電話番号を選択しています。

SELECT id, REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( phone, "+", '' ) , ")", '' ) , "(", '' ) , "-", '' ) , ' ', '' ) AS strippedPhone
FROM `customers`
GROUP BY strippedPhone
HAVING count( strippedPhone ) >1
LIMIT 0 , 300

見栄えが悪く、電話番号を持つフィールドの英数字の可能性を考慮していません。

より良い方法はありますか?

4

2 に答える 2

0

私の意見では、データベースに保存する前に電話番号を正規化する必要があります。形式に関係なく電話番号を比較できる SQL クエリは、非常に非効率的です。電話番号をデータベースに挿入する前に再フォーマットした場合と同様に、重複する番号のチェックは簡単です。

既存のデータベースでこれを行う場合は、最初にデータベース内のデータを正規化する必要がありますが、これは一度だけ行う必要があります。

于 2013-03-28T00:49:02.993 に答える
0

この StackOverflow 投稿の MySQL は、数値以外の文字を比較して削除する には、NumericOnly 関数を使用するソリューションがあります。

http://venerableagents.wordpress.com/2011/01/29/mysql-numeric-functions/

于 2013-03-28T00:38:27.057 に答える