2012-03-27 3 views
0

Я знаю, что этот вопрос очень похож на поставленный вопрос here. Но я не могу понять, почему я получаю эту ошибку. Этот синтаксис запроса:Ошибка MySQL: неверное значение даты и времени: '01/27/1989 'для функции str_to_date

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; 

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

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 просто вернет null. Я также использовал тот же синтаксис (без предложения where) для изменения временных форматов, и проблем не было. Если формат был неожиданным или неправильным, он просто обновил бы это поле с помощью значения null. Я не знаю, что случилось с этой ошибкой.

ответ

1

Это из-за предложения 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}$'); 
+0

Да, это проблема, позвольте мне попробовать. –

+0

Этот запрос должен сделать трюк, а затем – nnichols

+0

Очень приятно, спасибо! Я только что изменил информацию REGEX для учета четырехзначных лет и двухзначных лет -> ''^[0-9] {1,2}/[0- 9] {1,2}/[0-9] {2,4} $ ' ' –