9

PHP 和 MySQL 识别的最大日期是多少?

我的意思是,我对不同的时间线有不同的值,我想将它们全部作为BETWEENMySQL 中的选择,如下所示:

SELECT * FROM table WHERE date BETWEEN '2011-10-01' AND '2011-10-02';
SELECT * FROM table WHERE date BETWEEN '2011-10-03' AND '2011-10-10';

等等

为了获得所有选项,正在考虑这样的事情:

SELECT * FROM table WHERE date BETWEEN '0000-01-01' AND '2011-10-01';
SELECT * FROM table WHERE date BETWEEN '2011-10-02' AND '2011-10-10';
SELECT * FROM table WHERE date BETWEEN '2011-10-11' AND '9999-12-31';

这会一直有效吗?或者代码是否有可能在某个时候中断?

4

6 回答 6

28

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

取自http://dev.mysql.com/doc/refman/5.5/en/datetime.html

于 2012-11-01T14:21:15.290 回答
10

这是不同的日期范围,取决于您的列类型:

根据文档

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。

于 2012-11-01T14:22:39.080 回答
2

MySQL 的DATETIME类型支持从“1000-01-01”到“9999-12-31”。这应该足够了。

PHP 也可以分析这些;他们不是两位数的年份,所以很好。我刚刚在 9999-01-01 上运行了 strtotime,它起作用了。

于 2012-11-01T14:23:04.490 回答
1

你能这样做吗:

SELECT * FROM table WHERE date < '2011-10-01';
SELECT * FROM table WHERE date BETWEEN '2011-10-02' AND '2011-10-10';
SELECT * FROM table WHERE date > '2011-10-11' 
于 2012-11-01T14:15:22.577 回答
0

日期只不过是整数。整数大小取决于系统;即32位、64位等。

在 php 中,整数大小可以使用常量 PHP_INT_SIZE 确定,最大值使用常量 PHP_INT_MAX

在 mysql 中,您可以执行以下操作: SELECT ~0 as max_bigint_unsigned

于 2012-11-01T14:22:40.787 回答
-2

也许首先从您的表中获取最大值和最小值:

SELECT * FROM table WHERE date BETWEEN (SELECT MIN(date) FROM table) AND (SELECT MAX(date) FROM table)
于 2012-11-01T14:15:27.380 回答