2017-10-19 73 views
2

我想将不是有效日期格式的VARCHAR字符串插入到另一个表中,并将它们也作为VARCHAR存储。我试图用STR_TO_DATE做到这一点,它应该返回NULL,如果一个字符串的格式无效:MySQL无法插入WHERE STR_TO_DATE为NULL

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

会抛出一个错误与一个无效的日期格式字符串: Error Code: 1411. Incorrect datetime value: 'some random string that isnt a date' for function str_to_date。我不想抛出这个错误,而是希望将这些字符串值插入到DateErrors中。

但是,仅运行SELECT查询将返回date_string无效而不引发错误的行。

+0

为什么不只是'WHERE IS DATE_STRING NULL'?如果您正在查找空值,则无需格式化它。 – 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') 

相反,它应该是

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

我想从'source_table'插入行到'DateErrors'中,其中'date_string'与格式'%d-%m-%Y'不匹配 – Steven

+0

@Steven我不确定,你在问什么,但是我为您的问题提供了解决方案。您需要显示一些数据以了解您的问题 – Ravi