我有一个带有一个日期列的表
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我将无效的日期字符串转换为日期)
有人能帮助我实现目标吗?
答案 0 :(得分:0)
这应该有效:
UPDATE foo SET datecolumn = CAST(datecolumn AS DATE);
确保在SQL_MODE中未设置严格模式,否则任何尝试都将导致错误。