我的mysql表中有一个名为SELECT
id,
sum(datediff(weeks, startdate, ISNULL(enddate, '2000-01-01')) AS wksdoingstuff
WHERE
event IN ('something', 'somethingelse'. 'anotherthing')
AND BETWEEN 1989-01-01 AND 2000-01-01
GROUP BY
id
的列。
这是我创建它的方式。
leave_date
我早期的mysql版本没问题,但现在我有5.7,当我尝试创建上表时,我可能会收到错误。
消息看起来像这样:
ERROR 1067(42000):' leave_date'
的默认值无效
有人可以告诉我会出现什么问题吗?
谢谢。
答案 0 :(得分:2)
以下是来自官方site的文件。(Mysql 5.7)
DATE类型用于具有日期部分但没有时间部分的值。 MySQL在' YYYY-MM-DD'中检索并显示DATE值。格式。支持的范围是' 1000-01-01'到' 9999-12-31'。
0000-00-00
不在1000-01-01
到9999-12-31
的范围内。
答案 1 :(得分:2)
您的问题是您没有使用有效日期。
MySQL中的最小有效日期是'1000-01-01'
,每个RDBMS通常都有自己的最小日期值。 Oracle为0001-01-01
,SQL-Server为01/01/1753
。
编辑:根据您收到的错误,我相信您在此专栏中也有时间价值?尝试将其更改为日期时间
ALTER TABLE employees MODIFY leave_date DATETIME NOT NULL DEFAULT '1000-10-01'
或者更新表并自己截断时间值,然后使用alter命令。
答案 2 :(得分:1)
这是因为服务器SQL模式 - NO_ZERO_DATE。
参考文献:
NO_ZERO_DATE - 在严格模式下,不要允许' 0000-00-00'作为有效日期。您仍然可以使用IGNORE选项插入零日期。如果不是严格模式,则接受日期,但会生成警告。