Запрос на LocalDateTime

У меня есть таблица, содержащая записи с типом данных DateTime в MySQL (например, 2013-01-17 21:16:06), а в моем объекте я выбираю тип данных LocalDateTime для поля даты. Во время моих запросов я хотел бы получить все записи только на основе двух дат (fromDate и toDate с помощью средства выбора даты). Допустим, я выбираю одну и ту же дату как для fromDate, так и для toDate, проблема в том, что оба значения будут одинаковыми, поскольку время равно 00:00:00, поэтому из базы данных нет результата.

Мне любопытно, использовал ли я правильный тип данных из Joda. Должен ли я настроить время для обоих значений, скажем, 00:00:00 для fromDate и 23:59:59 для toDate? Или какой подход лучше?


person abiieez    schedule 23.01.2013    source источник
comment
Выберите, где дата ›= от даты 00:00 и дата ‹ до даты + 1 день 00:00. Это сделает ваш запрос независимым от разрешения столбца даты.   -  person Salman A    schedule 23.01.2013
comment
что означает, что я должен создать новый LocalDateTime ровно через день после toDate. Это оно ?   -  person abiieez    schedule 23.01.2013
comment
Да. ИЛИ лучше, вы можете указать MySQL добавить один день к указанной дате (используя функцию DATE_ADD или просто /*SELECT*/ '2013-01-17' + INTERVAL 1 DAY).   -  person Salman A    schedule 23.01.2013
comment
Получил это работает. Например. 2013-01-17T00:00:00.000 - 2013-01-18T00:00:00.000. Означает ли это, что запись toDate была вставлена ​​в тот же день, что и fromDate? Или запись принадлежит следующему дню? Вы можете опубликовать свой комментарий в качестве ответа, и я приму его :)   -  person abiieez    schedule 23.01.2013


Ответы (1)


Учитывая столбец даты и времени и две произвольные даты в качестве входных данных, вы можете написать:

SELECT * FROM `table`
WHERE `datetime` >= @startDate
AND   `dateTime` <  @endDate + INTERVAL 1 DAY

Где:

  • startDate — дата начала включительно
  • endDate — конечная дата, исключая

Что означает вышеизложенное, лучше всего объяснить на примере следующих случаев:

  1. Чтобы увидеть все записи за 2013-01-17 (один день), startDate должен быть 2013-01-17, а endDate должен быть 2013-01-17.
  2. Чтобы увидеть все записи за 2013-01-172013-01-18 (два дня), startDate должен быть 2013-01-17, а endDate должен быть 2013-01-18.

Это делает выбор дат интуитивно понятным. Знак < гарантирует, что расчетная дата окончания будет исключена из результатов (например, в первом случае запрос пропускает записи `2013-01-18 00:00:00).

person Salman A    schedule 23.01.2013