Какова максимальная дата, которую распознает PHP и MySQL?
Я имею в виду, что у меня разные значения для разных сроков, и я хочу сделать их все как BETWEEN
в MySQL, например:
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';
Будет ли это всегда работать или есть шанс, что код может сломаться в какой-то момент?
Тип DATE используется для значений с частью даты, но без временной части. MySQL извлекает и отображает значения DATE в формате «YYYY-MM-DD». Поддерживаемый диапазон – от «1000-01-01» до «9999-12-31».
взято из http://dev.mysql.com/doc/refman/5.5/en/datetime.html
Вот другой диапазон дат, зависит от типа столбца:
Согласно документам
Тип DATE используется для значений с частью даты, но без временной части. MySQL извлекает и отображает значения DATE в формате «YYYY-MM-DD». Поддерживаемый диапазон – от «1000-01-01» до «9999-12-31».
Тип DATETIME используется для значений, содержащих как дату, так и время. MySQL извлекает и отображает значения DATETIME в формате «YYYY-MM-DD HH: MM: SS». Поддерживаемый диапазон: «1000-01-01 00:00:00» до «9999-12-31 23:59:59».
Тип данных TIMESTAMP используется для значений, содержащих как дату, так и время. TIMESTAMP имеет диапазон '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.
Не могли бы вы сделать так:
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'
Тип DATETIME
от MySQL поддерживается от «1000-01-01» до «9999-12-31». Этого должно быть достаточно.
PHP также может анализировать их; они не двухзначные годы, так что это хорошо. Я просто работал strtotime на 9999-01-01, и это сработало.
Даты – это не что иное, как целые числа. Целочисленный размер зависит от системы; т.е. 32 бит, 64 бит и т. д.
В размере целочисленного php можно определить с использованием константы PHP_INT_SIZE и максимального значения с использованием константы PHP_INT_MAX
В mysql вы можете сделать что-то такое: SELECT ~ 0 as max_bigint_unsigned
Возможно, сначала получите значения max и min из таблицы:
SELECT * FROM table WHERE date BETWEEN (SELECT MIN(date) FROM table) AND (SELECT MAX(date) FROM table)