2017-10-19 36 views
2

有効な日付形式ではないVARCHAR文字列を、VARCHARとしても格納されている別のテーブルに挿入しようとしています。私は、文字列の形式が無効である場合はNULLを返すことを想定され、これを、達成するためにSTR_TO_DATEを使用しようとしている: Error Code: 1411. Incorrect datetime value: 'some random string that isnt a date' for function str_to_date:無効な日付形式で文字列のエラーがスローされますMySQL WHERE STR_TO_DATE IS NULLを挿入できません

INSERT INTO DateErrors 
    SELECT `row_id`,`date_string` 
    FROM `source_table` 
    WHERE STR_TO_DATE(`date_string`,'%d-%m-%Y') IS NULL 

を。このエラーを投げる代わりに、これらの文字列値をDateErrorsに挿入します。

ただし、SELECTクエリだけを実行すると、エラーをスローせずにdate_stringが無効な行が返されます。

+0

ISなぜすべきですか?ヌル値を探している場合は、フォーマットする必要はありません。 – PaulProgrammer

+0

@PaulProgrammer私は、無効な日付が 'NULL'を返すと仮定していると思いますが、実際には' 00-00-0000'と表示されることがあります。 – tadman

+0

最初にこの問題を避けるためには、日付を格納するために 'DATE'カラムと* only *' DATE'カラムを使うように注意してください。理想的な形式は 'YYYY-MM-DD'またはISO-8601形式です。他のすべてはあいまいさにつながります。 – tadman

答えて

2

あなたが代わりにSTR_TO_DATE

STR_TO_DATE(`date_string`,'%d-%m-%Y') 

であなたの日付文字列のために間違ったフォーマットを指定している、それは `NULL` DATE_STRING WHEREをだけではない

STR_TO_DATE(`date_string`,'%Y-%m-%d') 
+0

'date_string'が '%d-%m-%Y'のフォーマットと一致しない' DateErrors'に 'source_table'の行を挿入したい – Steven

+0

@スティーブンあなたは何を求めていますか?あなたの問題の解決方法を教えてくれました。問題を理解するためにいくつかのデータを表示する必要があります – Ravi

関連する問題