您应该考虑将数据类型更改为date
并将日期存储在 mysql 格式中,这将使生活变得简单。
现在,如果您使用日期格式执行 str_to_date() 并且输入不是格式,那么它将返回 null。
mysql> select str_to_date( '2011-01-13', '%d-%M-%Y' ) as date;
+------+
| date |
+------+
| NULL |
+------+
所以你可以做的伎俩
update
`Table1`
SET `date` = case when str_to_date( `date`, '%d-%M-%Y' ) is null then date
else str_to_date( `date`, '%d-%M-%Y' ) end
更新
这可能属于警告
mysql> select str_to_date( '2011-01-13', '%d-%M-%Y' );
+-----------------------------------------+
| str_to_date( '2011-01-13', '%d-%M-%Y' ) |
+-----------------------------------------+
| NULL |
+-----------------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> show warnings ;
+---------+------+-----------------------------------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------------------------------+
| Warning | 1411 | Incorrect datetime value: '2011-01-13' for function str_to_date |
+---------+------+-----------------------------------------------------------------+
1 row in set (0.01 sec)
所以另一种方法是regex
用于更新
update
`Table1`
SET `date` = str_to_date( `date`, '%d-%M-%Y' )
where `date` not REGEXP('^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$')