我发布了一个问题,为什么以下查询提交了搜索日期。
SELECT * FROM Stuff Where Sell_by <= 2013-07-04;
我得到了新手回答:“你正在寻找等式2013-07-04的结果”
这对我来说非常有意义。所以我使用以下内容就可以了:
SELECT * FROM Stuff Where Sell_by <= '2013-07-04';
但它提出了另一个问题:如果2013年减去7减4是2002年。(我认为这就是MySQL所说的)
什么时候是零日? (那个日期有什么意义?)
答案 0 :(得分:3)
http://dev.mysql.com/doc/refman/5.6/en/datetime.html说:
MySQL以'YYYY-MM-DD'格式检索并显示DATE值。支持的范围是'1000-01-01'到'9999-12-31'。
随后:
无效的DATE,DATETIME或TIMESTAMP值将转换为相应类型的“零”值('0000-00-00'或'0000-00-00 00:00:00')。
阅读页面了解更多详情。
答案 1 :(得分:3)
答案取决于Sell_by
是什么。您存储日期的基本类型为DATE
,DATETIME
和TIMESTAMP
。 From the MySQL manual:
DATE类型用于具有日期部分但没有时间部分的值。 MySQL以'YYYY-MM-DD'格式检索并显示DATE值。该 支持的范围是'1000-01-01'到'9999-12-31'。
DATETIME类型用于包含日期和时间的值 部分。 MySQL在'YYYY-MM-DD中检索并显示DATETIME值 HH:MM:SS'格式。支持的范围是'1000-01-01 00:00:00'到 '9999-12-31 23:59:59'。
TIMESTAMP数据类型用于包含date和的值 时间部分。 TIMESTAMP的范围是'1970-01-01 00:00:01'UTC到 '2038-01-19 03:14:07'UTC。
尽管如此,至少在我看来,拨打1月1日,1000日“零日”并没有多大意义。它恰好是由DATE
和DATETIME
表示的最早的日子,但它有一个众所周知的值,它与零不同,即1000年的第一天。
好的,通过这种逻辑,你可以说1970-01-01无权将自己称为零。但TIMESTAMP
的这个开始日期被选为beginning point of Unix time。由于那个时间格式被定义为“让我们计算自1970年初以来发生的秒数”(...... ish),它真的 从零开始。
长话短说,没有“零日”,只有可以被解释为零的东西,这取决于你如何看待它们。