このエラーメッセージを結構見かけるのですが、どの行で発生しているのか?のエラー情報が記載されない為、対処方法にてこづりました。特にググっても対処方法が見つからず困ったので、メモ的に投稿しておきます。
※同じメッセージで別のエラーが出るパターンがあれば適宜追加していきたいと思います。
エラーメッセージの例と対処方法
Query error: Invalid timestamp: '2018-05-09 10:02:52.785000 +00:00' at [7:1]
ぱっと見る限り、日付系で何かダメって怒られてる。
ところまではわかるのですが、日付項目をSELECT句や、WHERE句で複数箇所利用している場合、どれだよ?
となると思います。
とりあえず、SELECT句の条件、WHERE句の条件から日付を利用している部分を1個ずつコメントして原因探った結果、
以下コードが問題でした。
DATE_DIFF( DATE(table1.target_date), DATE(table2.target_date), MONTH) >= 1
どうやら、このtarget_dateの中身が
'2018-05-09 10:02:52.785000 +00:00'
になっていて、DATE関数で変換できませんよ。
ということだったようです。
対策として、以下のようにSUBSTR関数を使って日付項目を調整すれば問題なく処理されました。
DATE_DIFF( DATE(SUBSTR(table1.target_date, 1, 10)) , DATE(SUBSTR(table2.target_date , 1, 10)), MONTH) >= 1
ふたを開けてみればデータの型問題ということで、大した内容ではなかったのですが、この事例の問題点は、
- 標準のデバッカーには引っかからない為、あたかも問題ないように見えた
- その状態でSQLを流すと、エラーになる
- エラーの発生行数がわからない
に尽きると思います。
せめてどの項目でエラーになっているのか?だけでもエラーメッセージに追加されるとありがたいところです。