私はcsvファイルからデータを取り出し、それをすべてテンポラリーテーブルに投げているので、すべてが文字列形式です。STR_TO_DATEはNULLの代わりにエラーを返します
したがって、日付フィールドも文字列形式であるため、日付を文字列から日付に変換する必要があります。すべての日付はこの形式です28/02/2013
私はこれにSTR_TO_DATEを使用しましたが、問題が発生しています。 ここに私のコードのスニペットがあります。
INSERT INTO `invoice` (`DueDate`)
SELECT
STR_TO_DATE('','%d/%m/%Y')
FROM `upload_invoice`
もちろんこれ以上のフィールドはありますが、私は機能しないフィールドに集中しています。 このコマンドを使用すると、日付が無効な場合はnullになりますが、nullが入力される代わりにエラーが生成されます。
#1411 - Incorrect datetime value: '' for function str_to_date
エラーの意味を理解しています。これは、正しい形式の日付の代わりに空のフィールドを取得していることを意味しますが、ドキュメントを読んだ後でエラーを投げてはいけませんが、nullを挿入する必要があります。
ただし、INSERTを指定せずにSELECT文を使用した場合は正常に動作します。
私は実際にフィールドが空であればSTR_TO_DATEが実行されないポイント
IF(`DueDate`!='',STR_TO_DATE(`DueDate`,'%d/%m/%Y'),null) as `DueDate`
に働く次の行を行うことができます。これはうまくいきますが、例えば日付がASDFADFASの場合など、有効でない日付をチェックすることはできません。
だから、私は
IF(TO_DAY(STR_TO_DATE(`DueDate`,'%d/%m/%Y') IS NOT NULL),STR_TO_DATE(`DueDate`,'%d/%m/%Y'),null) as `DueDate`
を試みたが、これはまだif文で#1411エラーが発生します。
なぜ私の質問は、STR_TO_DATEが間違った日付にNULLを返さないのですか? #1411エラーが発生してはいけません。
これは他の質問と全く同じではありません。満足できる答えもなかった。私はこれをしばらくの間解決しました。私は解決策を追加しました。これは実際には他の投稿で与えられたより良い解決策です。
[5.1.8サーバSQLモード:: MySQL 5.7のSQLモードの変更点](https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-changes)を確認してください。 )。別のオプションは、[12.4 Control Flow Functions :: NULLIF()](https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions)を使用することです。html#function_nullif)。 – wchiquito
'mysql> sql_notes = 0;を設定すると、mysqlに1411のようなワーニングが表示されなくなります。 – Amir
私たちのサーバ上のmysqlの内部動作にアクセスする権限がありません。だから私はそれを行うことができるとは思わない –