はじまり
人間さん「む、靴のサイズを使ったシステムで何かエラーが出たぞ」
人間さん「サイズ値が数字ではないって言われてる」
人間さん「どれどれ、データを見てみますか」
人間さん「う~ん、なにやら半角と全角スペースが入ってるデータがあるからこれが原因か」
shoesテーブル
id | name | size |
---|---|---|
1 | スニーカー |
25 |
2 | 運動靴 | 23
|
3 | サンダル | 24 |
4 | スパイク |
26 |
5 | 下駄 | 22
|
空白を検索しよう
人間さん「空白入りの検索ってどうやるんだろう?」
いぬ先生「いくつか方法があるから紹介するよ」
正規表現を使うパターン
空白検索
SELECT * FROM `shoes` WHERE `size` REGEXP '[ ]';
いぬ先生「REGEXP を使って正規表現で空白を検索する方法だよ」
いぬ先生「 [] の中に半角スペースと全角スペースを続けて入力することで」
いぬ先生「いずれかが含まれている値を検索する」
数字以外を検索
SELECT * FROM `shoes` WHERE `size` REGEXP '[^0-9]';
いぬ先生「余談ではあるけど、これは数字以外を検索するもの」
いぬ先生「なので半角スペースや全角スペースはもちろん、記号や全角文字もヒットする」
いぬ先生「数字以外は望まないようだから、これで不正なデータを検索するものいいかも」
LIKE句を使うパターン
SELECT * FROM `shoes` WHERE `size` LIKE '% %' OR `size` LIKE '% %';
いぬ先生「これはシンプルな検索だね」
いぬ先生「そしていずれも半角・全角を含んだデータが抽出される」
id | name | size |
---|---|---|
1 | スニーカー |
25 |
2 | 運動靴 | 23
|
4 | スパイク |
26 |
5 | 下駄 | 22
|
空白を除去しよう
半角スペースの除去
人間さん「データを精査したいから空白を除去しよう」
人間さん「TRIM を使うといいってことかやってみよう」
UPDATE `shoes` SET `size` = TRIM(`size`);
id | name | size |
---|---|---|
1 | スニーカー | 25 |
2 | 運動靴 | 23 |
3 | サンダル | 24 |
4 | スパイク |
26 |
5 | 下駄 | 22
|
半角・全角スペースの両方を除去
人間さん「あれ?半角スペースは除去されたけど全角スペースが消えてない」
いぬ先生「TRIMはそのままだと全角スペースは除去できないよ」
いぬ先生「全角スペースを半角に置き換えてからTRIMを使おう」
UPDATE `shoes` SET `size` = TRIM(REPLACE(`size`, ' ', ' ');
id | name | size |
---|---|---|
1 | スニーカー | 25 |
2 | 運動靴 | 23 |
3 | サンダル | 24 |
4 | スパイク | 26 |
5 | 下駄 | 22 |
人間さん「おぉ整った!」