1

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

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

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

4

2 回答 2

4

答案取决于是什么Sell_by。存储日期的基本类型是DATEDATETIMETIMESTAMP从 MySQL 手册

DATE 类型用于具有日期部分但没有时间部分的值。MySQL 以 'YYYY-MM-DD' 格式检索和显示 DATE 值。支持的范围是“1000-01-01”到“9999-12-31”。

DATETIME 类型用于同时包含日期和时间部分的值。MySQL 以 'YYYY-MM-DD HH:MM:SS' 格式检索和显示 DATETIME 值。支持的范围是“1000-01-01 00:00:00”到“9999-12-31 23:59:59”。

TIMESTAMP 数据类型用于同时包含日期和时间部分的值。TIMESTAMP 的范围为 '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC。

不过,至少在我看来,将 1000 年 1 月 1 日称为“零日”并没有多大意义。它恰好是 和 可表示的最早日期DATEDATETIME但它有一个众所周知的不为零的值,即 1000 年的第一天。

好吧,按照这个逻辑,你可以争辩说 1970-01-01 也无权称自己为零。但是这个开始日期TIMESTAMP被选为Unix 时间的开始点。而且由于该时间格式被定义为“让我们计算自 1970 年初以来发生的秒数”(...ish),它确实从零开始

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

于 2013-07-02T20:04:43.517 回答
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')。

阅读页面了解更多详情。

于 2013-07-02T19:54:44.123 回答