Intereting Posts
Почему PHP заменяет плюсы на пробелы в $ _COOKIE? Переменная PHP не отображается на странице через ajax jquery Использует ли библиотека GD много памяти? preg_repalce соответствует частичным данным с правильным регулярным выражением Сообщение об ошибке Строгие стандарты: нестатический метод не следует называть статически в php SQL-предупреждение XSS фильтрация слов из текста с помощью эксплойтов Динамически созданное предложение WHERE PHP / MySQL Может ли PHP обрабатывать форму PDF, представленную в виде полного документа PDF Отобразить последнее изображение в каталоге, заканчивающемся на LIMIT приводит к MySQL? Можно ли вводить php-оболочку в изображение? Как это будет работать? выберите *, который соответствует почтовому индексу пользователя в таблице mysql? Как заменить первый и последний 3 символа строки звездочкой без каких-либо функций? Добавление нескольких абонентов к конференц-вызову от вызывающего абонента Twilio

PHP и MySQL – самая маленькая и самая большая возможная дата

Какова максимальная дата, которую распознает 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)