0

以下に示すように、電話番号の例がいくつかあります。

0810-093-485-58
0811.4845.5677
0812 567 6788 2
08138475967079/0813845765998
0814749345875 NEW
64739845985
0815756867967 (G) / 022 845 769
00816956865090
0817637698578

次のように、replaceとregexpを使用しようとしました。

select replace (number, '','') as phone_number
from details
where number not regexp '[[:punct:] A-Za-z]' and number not regexp '^ [1-9]'

これらの構文を適用すると、次の結果のみが適用されます。

0817637698578

ここでの私のポイントは、これらの句読点、スペース、および含まれている文字をクリーンアップしたいということです。

081009348558
081148455677
08125676788 2
08138475967079
0814749345875
0815756867967
0816956865090
0817637698578

したがって、結果は1つだけでなく、すべての電話番号であり、数値以外の番号だけがクリアされます。構文はどうですか?助けてください。ありがとうございました。

4

2 に答える 2

1

あなたのwhere句は、アルファ、スペース、または句読点を含むすべての数字を除外しているため、表示されるのは整形式の数字だけです。またreplace (number, '','')、文字列をまったく変更しません。

正規表現replace関数はユーザー定義関数として利用できますが、ネイティブ関数としては利用できません。PREG_REPLACEここを見てください。

于 2012-05-10T17:00:08.960 に答える
1

データベースへのコード投稿でこれを行わないのはなぜですか? 正規表現は、ほとんどの言語で SQL よりもはるかに簡単であり、データベース サーバーに負荷をかけないという追加の利点があります。

粗いものは、この質問には役に立ちません。ユーザー定義関数の使用について考えたことはありますか? たとえば、このパッケージhttps://launchpad.net/mysql-udf-regexp ?

于 2012-05-10T17:04:59.197 に答える