我想将不是有效日期格式的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
无效而不引发错误的行。
为什么不只是'WHERE IS DATE_STRING NULL'?如果您正在查找空值,则无需格式化它。 – PaulProgrammer
@PaulProgrammer我认为这是假设无效日期返回NULL,但他们可能实际上显示为'00-00-0000'。 – tadman
你真的应该转向使用'DATE'列和* only *'DATE'列来存储日期以避免这个问题。理想的形式是'YYYY-MM-DD'或ISO-8601格式。所有其他人导致歧义。 – tadman