Ошибка MySQL: неверное значение даты и времени: «01/27/1989» для функции str_to_date - PullRequest
0 голосов
/ 27 марта 2012

Я знаю, что этот вопрос очень похож на вопрос, размещенный здесь .Но я не могу понять, почему я получаю эту ошибку.Синтаксис этого запроса:

update schema.table set date_field = str_to_date(date_field, '%m/%d/%Y') where str_to_date(date_field, '%Y-%m-%d') is null;

Здесь указано условие where, чтобы убедиться, что оно не изменяет даты, которые уже правильно отформатированы.Выдает эту ошибку:

Error Code: 1411. Incorrect datetime value: '01/27/1989' for function str_to_date

Я могу выполнить следующий запрос без проблем или ошибок, вот как я тестирую, прежде чем вносить изменения:

select row_id, date_field, str_to_date(date_field, '%m/%d/%Y'), str_to_date(date_field, '%Y-%m-%d') from schema.table;

Эта ошибка страннаяпотому что при выполнении этого последнего оператора выбора, если есть неправильный или неожиданный формат, str_to_date просто вернет ноль.Я также использовал этот же синтаксис (без предложения where) для изменения форматов времени, и проблем не было.Если формат был неожиданным или неправильным, он просто обновил бы это поле значением null.Я не знаю, что случилось с этой ошибкой.

1 Ответ

1 голос
/ 27 марта 2012

Это из-за предложения WHERE. Какие текущие данные в этом столбце? Это то, что некоторые из них находятся в Y-m-d, а некоторые в m / d / Y? Если это так, вы можете использовать регулярное выражение для вашего предложения WHERE -

UPDATE schema.table
SET date_field = STR_TO_DATE(date_field, '%m/%d/%Y')
WHERE date_field REGEXP('^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$');
...