【发布时间】:2016-11-23 16:40:38
【问题描述】:
我有一个带有一个日期列的表
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 我将无效的日期字符串转换为日期)
谁能帮我实现我的目标?
【问题讨论】:
-
那么你是说
SELECT STR_TO_DATE('1949-02-30','%Y,%m,%d')在MariaDB 中不 返回NULL吗?那么它实际上返回了什么? -
SELECT STR_TO_DATE('1949-02-30','%Y,%m,%d')确实返回NULL,但SELECT STR_TO_DATE('1949-02-10','%Y,%m,%d')也是如此。SELECT STR_TO_DATE('1949-02-30','%Y-%m-%d')但返回1949-02-30(1949-02-10 的模拟)。 -
STR_TO_DATE不返回NULL似乎是一个错误。它存在于 MySQL 5.5/5.6 和所有版本的 MariaDB 中。在 MySQL 5.7 中,它似乎已修复,但并不完美,因为它会产生重复的警告,但至少它确实返回NULL; MariaDB 也应该很快修复。