如何删除 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 中取消设置严格模式,否则任何尝试都会导致错误。
我有一个 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 中取消设置严格模式,否则任何尝试都会导致错误。