データベースのインポート後、データベースに保存された(時には複数の)空白で終わるダーティフィールドの行があります。何千もの他の行の中でそれらを見つけるために、空白で終わるMySQLフィールドの検索
SELECT * FROM `mytable` WHERE `dirtyfield` REGEXP ' $'
しかし、それはゼロ行を返します。いくつかのきれいな行は、そのフィールド内の単語の間に単一のスペースを持っているので、あまり助けにはならない単一のスペースですべてを見つける
SELECT * FROM `mytable` WHERE `dirtyfield` REGEXP '[[:space:]]$' -- Zero Rows
SELECT * FROM `mytable` WHERE `dirtyfield` REGEXP '[[.space.]]$' -- Zero Rows
SELECT * FROM `mytable` WHERE `dirtyfield` REGEXP '[[.space.]]' -- Those with a space anywhere in the value
SELECT * FROM `mytable` WHERE `dirtyfield` REGEXP '[[.space.]]{2}' -- Those with two spaces in a row
:私は他のいくつかの他の結果とバリエーションを試してみました。最後のものはダーティ行の90%をキャッチしますが、最後にはスペースが1つしかないものは見逃します。フィールドの終わりを示すために$
シンボルを使用する方法に何か問題がありますか?
MySQLのRIGHT()
とSUBSTRING()
機能はフィールドの終わりを計算する際に空白を取り除くように見える:
SELECT * FROM `mytable` WHERE TRIM(`dirtyfield`)!=`dirtyfield` -- zero rows returned
:
SELECT * FROM `mytable` WHERE RIGHT(`dirtyfield`)=" " -- Only returns one row that has " " for that field
SELECT * FROM `mytable` WHERE SUBSTR(`dirtyfield`,-1)=" " -- Only returns one row that has " " for that field
他の一つは、比較は動作しないかでした使用してみてください「汚れているフィールド」フィールドはVARCHAR(128)
です。
編集:私はばかです。フィールドは空白で終わらず、複数の空白で終わり、コンマ(悪いCSVファイルからインポートされます)が続きます。
SELECT * FROM `mytable` WHERE RIGHT(`dirtyfield`,1)=','
そのクエリが見つかりました。私はカンマで区切られたビューでテーブルの出力を見ていて、カンマが二重になっていることに気付かなかった。
を助けるかもしれないあなたはスペースがあることを確認しているところでダンプからいくつかのラインを投稿することができますか? – kappa