LoginSignup
0
0

More than 1 year has passed since last update.

【MySQL】「空白を含んだデータを検索・除去したい」

Last updated at Posted at 2022-09-21

はじまり

人間さん「む、靴のサイズを使ったシステムで何かエラーが出たぞ」
人間さん「サイズ値が数字ではないって言われてる」
人間さん「どれどれ、データを見てみますか」
人間さん「う~ん、なにやら半角と全角スペースが入ってるデータがあるからこれが原因か」

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

人間さん「おぉ整った!」

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0