モノワスレ

ブログに書いて忘れましょう

MySQL でスペースをトリムする

諸事情によりMySQLだけで後方スペースをトリムしたかった。

全角スペースをトリムする

http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_trim

'xxx' を ' 'にすれば良い

mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');
        -> 'barxxx'
mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');
        -> 'bar'
mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');
        -> 'barx'

全角半角が混在しているものをトリムする

先に結論を言うと MySQL 単体だと難しい。
できるかもしれないけど考えるのが面倒くさいのでやめた。

とりあえず混在しているかどうかを確認する
→ 混在していなければ半角、全角をそれぞれ TRIM すればOKという考え。

対応件数確認

確認に正規表現を使おうかと思ったが
http://dev.mysql.com/doc/refman/5.5/en/regexp.html#operator_regexp
マルチバイトに対応していないとのことなので全角スペースのチェックで不備が出る可能性がある。
→ 一旦 REPLACE で全角スペースを半角スペースに直して検索をかけることにする

mysql> SELECT COUNT(*) FROM hoge WHERE fuga REGEXP '[[:blank:]]+$';
mysql> SELECT COUNT(*) FROM hoge WHERE REPLACE(fuga, ' ', '%%SP%%') REGEXP '%%SP%%+$';
mysql> SELECT COUNT(*) FROM hoge WHERE REPLACE(fuga, ' ', ' ') REGEXP '[[:blank:]]+$';

半角のみ、全角のみ、半角全角混在で数を出す。
→ 半角+全角=半角全角混在 混在していない

更新
mysql> UPDATE hoge SET fuga = TRIM(TRAILING ' ' FROM fuga);
mysql> UPDATE hoge SET fuga = TRIM(TRAILING ' ' FROM fuga);