什么时候是MySQL的开始时间

时间:2013-07-02 19:51:21

标签: mysql datetime

我发布了一个问题,为什么以下查询提交了搜索日期。

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所说的)

什么时候是零日? (那个日期有什么意义?)

2 个答案:

答案 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是什么。您存储日期的基本类型为DATEDATETIMETIMESTAMPFrom 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日“零日”并没有多大意义。它恰好是由DATEDATETIME表示的最早的日子,但它有一个众所周知的值,它与零不同,即1000年的第一天。

好的,通过这种逻辑,你可以说1970-01-01无权将自己称为零。但TIMESTAMP的这个开始日期被选为beginning point of Unix time。由于那个时间格式被定义为“让我们计算自1970年初以来发生的秒数”(...... ish),它真的 从零开始。

长话短说,没有“零日”,只有可以被解释为零的东西,这取决于你如何看待它们。