如何删除 MariaDB 10.1 中的无效日期值?

How to remove invalid date values in MariaDB 10.1?

我有一个 table 和一个日期列

foo(之前):

+------------+
| datecolumn |
+------------+
| 1939-04-06 |
| 1949-02-30 |
+------------+

如果日期无效,我想将它们设置为 NULL。

foo(之后):

+------------+
| datecolumn |
+------------+
| 1939-04-06 |
| NULL       |
+------------+

在 MySQL (5.7) 中,我可以使用这个技巧来实现这一点:

ALTER TABLE `foo` MODIFY COLUMN `datecolumn` varchar(255) NULL DEFAULT NULL FIRST;
SET SQL_MODE='ALLOW_INVALID_DATES';
ALTER TABLE `foo` MODIFY COLUMN `datecolumn` date NULL DEFAULT NULL FIRST;
SET SQL_MODE='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
UPDATE `foo` SET `datecolumn` = NULL WHERE `datecolumn` = '0000-00-00';

然而,这在 MariaDB 10.1 中似乎不起作用,无论我尝试了什么:

1) 各种 SQL_MODE 的

2) 各种 STR_TO_DATE 或 DATE_FORMAT 方法(我希望得到 NULL 我将无效的日期字符串转换为日期)

有人可以帮助我实现我的目标吗?

这应该有效:

UPDATE foo SET datecolumn = CAST(datecolumn AS DATE);

确保在 SQL_MODE 中取消设置严格模式,否则任何尝试都会导致错误。