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

时间:2016-11-23 16:40:38

标签: mysql mariadb

我有一个带有一个日期列的表

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我将无效的日期字符串转换为日期)

有人能帮助我实现目标吗?

1 个答案:

答案 0 :(得分:0)

这应该有效:

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

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