Преобразование внутренней даты MySQL в дату и время. PHP (Zend Framework 1.11) как промежуточное ПО

Поэтому мне интересно, столкнулся ли я с ошибкой, которая должна быть более или менее очевидной.

Итак, скажем, у нас есть поле БД с именем dateField, которое находится в дате и времени. Предположим также, что все записи в таблице имеют это значение: 2013-10-15 13:15:46.

Теперь мы хотели бы извлечь записи в диапазоне дат. Мы используем формат 2013-10-15 (yyyy-mm-dd) во внешнем интерфейсе веб-сайта. (Нет, SQL-инъекция НЕвозможна. Она проходит через PDO. :D)

Давайте также предположим, что оператор select вставляется следующим образом: $select->where('dateField >= ?', $dateFrom); $select->where('dateField ‹= ?', $dateTo);

Итак, когда у нас есть такой диапазон:

От: 10.10.2013 До: 16.10.2013 все в порядке.

Но с таким выражением: От: 15.10.2013 До: 15.10.2013 результатов не будет! :D

Я предполагаю, что MySQL внутренне преобразует мой тип даты 2013-10-15 в 2013-10-15 00:00:00 и мой WHERE пункт становится:

SELECT .... WHERE dateField <= 2013-10-15 00:00:00 AND dateField >= 2013-10-15 00:00:00;

Конечно, в данном случае 2013-10-15 13:15:46 НЕ находится в моем предложении WHERE. :Д :Д

Я уже исправил это, сравнив только часть даты:

$select->where('DATE(dateField) >= ?', $dateFrom);
$select->where('DATE(dateField) <= ?', $dateTo);

Но мои вопросы:

Может ли кто-нибудь объяснить немного больше о внутренних преобразованиях даты/даты и времени MySQL (операции низкого уровня)?

Является ли этот вопрос хорошим дополнением к вики сообщества?


person Borislav Sabev    schedule 15.10.2013    source источник


Ответы (1)


Если часть времени не установлена, то преобразование такой DATE в DATETIME/TIMESTAMP приведет к заполнению ее части времени как 00:00:00 - это нормальное поведение (подобно описанному здесь).

Чтобы это заработало - вам нужно явно указать часть времени с 2013-10-15 00:00:00 по 2013-10-15 23:59:59

person Alma Do    schedule 15.10.2013