貰ったデータが全角、半角、記号など含めれている場合、当然だが、スクリプト上で計算できない。特にphp+MySQLだと変数を宣言しないで使うので、とても困ったり。
php側でmb_convertすればいいが、最初にデータベース上で一度すっきり直したいもの。
…、でデータ型を直せばいけると気がついて実験してみる。
あ、SELECTするときにCAST関数とか抜き出す時ではなくて、
元データを型を変更して正式なデータにできるかっ?ということで。
これ夢かもしれないが、ある現場でたまたまうまく行ったケースがある。
これが使えるなら、わざわざエディタやエクセルやら、もしくは
自分でわざわざコンバート用のスクリプト組む必要ないものね。
データベースにデータ型に合わない
不正データがあった場合、
どの辺まで自動で直してくれるか実験
まずは日付から実験
まずは日付データをテストしてみる。
id | test_date | |
1 | 2016/2/10 | 年が全角でそれ以外が半角・スラッシュ区切り |
2 | 2016/2/10 | 全部半角でスラッシュ区切り |
3 | 20160210 | 全角 |
さて、これを入れて、データ型を直してみる。
INSERT INTO `date_test` (`id`, `test_data`) VALUES ('1', '2016/2/10'), ('2', '2016/2/10'), ('3', '20160210');
主キーはidに、
ここにtest_dataの構造をDATE型へ
ALTER TABLE `date_test` CHANGE `test_data` `test_data` DATE NOT NULL;
↓
だめだな。ダメだよね。当然だよね。
じゃ、全角だけならいけるか?
INSERT INTO `date_test` (`id`, `test_data`) VALUES ('1', '2016/11/10'), ('2', '2016/05/20'), ('3', '2016/10/10');
で、
ALTER TABLE `date_test` CHANGE `test_data` `test_data` DATE NOT NULL;
やっぱりダメでした。
結論から、テーブルに入れる前にちゃんと直してとけってやつか。
ネット上ではこんな馬鹿なことやる人いるのか確認
見かけたのは一度、関数使ってSELECTして、
違うテーブルにインポートすればいいじゃね?という意見、
そうだね。
不正データは不正データで直さないとね。
ん・・・なんだかスッキリしないな。