MySQL错误:函数str_to_date的日期时间值:'01 / 27/1989'不正确

时间:2012-03-27 14:21:01

标签: mysql datetime datetime-format

我知道这个问题与发布的here问题非常相似。但我无法弄清楚为什么我会收到这个错误。此查询语法为:

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;

这个错误很奇怪,因为在执行最后一个select语句时,如果存在不正确或意外的格式,str_to_date将只返回null。我也使用相同的语法(没有where子句)来更改时间格式,并且没有问题。如果格式是意外或不正确,则只会使用null值更新该字段。我不知道这个错误到底是什么。

1 个答案:

答案 0 :(得分: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}$');