すべての特殊文字を削除するクエリがあります。
しかし、1つのスペースは、電子メール文字列の最後にそのクエリに抵抗します。改行しないスペースを削除しますか?
例:'[email protected] '
UPDATE my_table SET email= REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(TRIM(LTRIM(RTRIM(email))),\'\x0B\',\'\'),\'\0\',\'\'),\'\t\',\'\'),\'\r\',\'\'),\'\n\',\'\'),\'\r\n\',\'\'),\'\n\r\',\'\'),\' \',\'\'),CHAR(160),\'\') WHERE id=X
なぜ?
私はWHERE id IN()
を持っているので、私はこの文を使用するので、私はPHPの特殊文字を処理する必要はありません。私はSET
とreplace
、trim()
の機能を持つすべての電子メールに直接UPDATE
したいです。
ただし、一部の空白は削除されず、理由はわかりません。
テーブルには約1200万行があります。すべてのスペシャルキャラクターを削除するためにそれらをフェッチするCRONをプログラムしました(残念なことに、これまではINSERT
にチェックしていなかったので)。
私は12MMの行を処理するためにこのクエリをビルドしました。適切な空白を除いて非常に効果的です(時には削除されないこともあります)。そして、私はそれをWorkbenchに追加したい、クエリは常に100%働く。それは意味がありません。ここで
は私のクエリは、バックスラッシュなしで、私のwhere IN
で再びです:
UPDATE NEWSLETTER_SUBSCRIPTION SET email= REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(TRIM(LTRIM(RTRIM(email))),'\x0B',''),'\0',''),'\t',''),'\r',''),'\n',''),'\r\n',''),'\n\r',''),' ',''),CHAR(160),'') WHERE id IN (' . implode(',', $idEmailToBeProcess) . ')
$idEmailToBeProcess
は、約500のIDが含まれています。
私は右の空白が、それは改行なしスペースだが、私のクエリでCHAR(160)
と私の最後のテストが機能しなかったと思います。
質問を作成している言語でこのタスク用に特別に作成された関数を使用するだけではどうですか? IE。 PHPでは[trim](http://www.php.net/manual/en/function.trim.php)があります。 – tenub
母国語は何ですか? PHP?あなたがPHPで 'preg_replace'のようなものを使うことができるときに、その醜いネストされたSQLステートメントを作る努力をしている理由は分かりません。 – brandonscript
@tenub交換ネストの途中に3つのトリムがあります。 – Jerry