我知道这个问题与发布的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
值更新该字段。我不知道这个错误到底是什么。
答案 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}$');