※当サイトの記事には、広告・プロモーションが含まれます。

MySQLのDATE型にてDBViewerとコマンドプロンプトの表示の違いでハマる

We are the World~、We are the DBViewer~、からのコマンドプロンプトで、今回はDBViewerとコマンドプロンプトの仁義なき闘いですかね。

悲しいとき~、MySQLのDATE型で有効でない値が入ったとき~

まあ、100%自分が悪いんですが、LibreOfficeのCalcというものがExcelに似たことができるということで、MySQLのデータベースのテーブルに入れるダミーデータを作っていたんですよ。

な~~にぃい~~~~~~~~~~!!!!? やっちまったな!

いや、まだクールポコ先輩の雰囲気じゃないんですが、LibreOfficeのCalcの練習で日付のデータをCalcのrand関数とかで作っていたわけです。

当然、日付が31日までランダムになってしまうので、西向く侍(2、4、6、9、11)の月で値が不正になってしまう可能性があったので、DBViewerを見ると、

f:id:ts0818:20170819232852j:plain

「NULL」になってる個所が!?

LibreOfficeのCalcを見ると、

f:id:ts0818:20170819233130j:plain

たしかに、11月に31日なんてないですよね~、というわけで、コマンドプロンプト

SELECT * FROM tour_sales FROM sale_date = NULL;

 f:id:ts0818:20170819232849j:plain

を実行したところ、Empty set (0.00 sec)とか表示されたんで、もう不正な値ないんですね、では、

SELECT EXTRACT(YEAR_MONTH from sale_date), 
  SUM(price_sum) AS '月ごとの売り上げ', 
  SUM(tour_price_count) AS '月ごとの販売数' 
FROM tour_sales 
GROUP BY EXTRACT(YEAR_MONTH from sale_date);

f:id:ts0818:20170819232846j:plain

 って実行したところ、始めに『EXTRACT(YEAR_MONTH from sale_date)』のところが0って...な~~にぃいーーーーーーーーーーーーーーーーに!?やっちまったな!

男は黙って、コマンドプロンプト、ということで、MySQLのマニュアルで書いてあった「0000-00-00」は不正の値という説明を思い出し、

SELECT * FROM tour_sales WHERE sale_date = '0000-00-00';

f:id:ts0818:20170819235416j:plain

DBVierwerでは、NULLに!

f:id:ts0818:20170819235419j:plain

LibreOfficeのCalcのほうでも、たしかに存在しない値になってます。

f:id:ts0818:20170819235131j:plain

DBViewerを信じるかコマンドプロンプトを信じるかはあなた次第...今日も時間を無駄にしてしまった。 

今回はこのへんで。