Выбор данных между диапазоном datetime

#php #mysql #datetime #range #between

#php #mysql #datetime #диапазон #между

Вопрос:

У меня есть таблица с именем lap , и она содержит такие данные :

 code | name | details | time_stamp
===================================
1a   | A-wan| Goods   | 01-02-2019 11:08:10
3a   | D-wan| Goods   | 05-02-2019 01:00:40
2a   | B-gud| Foods   | 02-03-2019 05:31:05
1a   | A-cro| Bills   | 02-03-2019 15:30:15
1a   | A-set| Bills   | 03-03-2019 17:24:35
1a   | C-won| Goods   | 03-03-2019 10:21:55
1a   | C-gud| Foods   | 04-03-2019 01:30:06
  

Я использовал dd-mm-yy hh:mm:ss формат

и мой запрос SELECT * FROM lap WHERE time_stamp >= '02-03-2019 00:00:00' AND time_stamp <= '03-03-2019 23:59:59'

результатом является

 code | name | details | time_stamp
===================================
3a   | D-wan| Goods   | 05-02-2019 01:00:40
2a   | B-gud| Foods   | 02-03-2019 05:31:05
1a   | A-cro| Bills   | 02-03-2019 15:30:15
1a   | A-set| Bills   | 03-03-2019 17:24:35
1a   | C-won| Goods   | 03-03-2019 10:21:55
  

он включает в себя данные
3a | D-wan| Goods | 05-02-2019 01:00:40
я думаю, это может быть из-за того, что 05 больше, чем 02 , хотя это другой месяц.
Кто-нибудь может помочь в этом?

когда я изменяю запрос на ту же дату, он работает хорошо SELECT * FROM lap WHERE time_stamp >= '02-03-2019 00:00:00' AND time_stamp < '02-03-2019 23:59:59'

 code | name | details | time_stamp
===================================
2a   | B-gud| Foods   | 02-03-2019 05:31:05
1a   | A-cro| Bills   | 02-03-2019 15:30:15
  

Комментарии:

1. Вы пробовали SELECT * FROM lap WHERE time_stamp BETWEEN '02-03-2019 00:00:00' AND '03-03-2019 23:59:59' ?

2. @nDy какой тип данных time_stamp в таблице вашей базы данных?

3. 05 — это день, а не месяц.

4. Сохраняйте даты / время, используя соответствующий тип данных даты / времени

5. Да, я пробовал SELECT * FROM lap WHERE time_stamp BETWEEN '02-03-2019 00:00:00' AND '03-03-2019 23:59:59' . Это не сработало

Ответ №1:

Вы должны использовать date функцию, тогда она будет работать,

 SELECT * FROM lap WHERE time_stamp BETWEEN '02-03-2019' AND '03-03-2019';
  

или вы можете изменить формат на yyyy-mm-dd в своей серверной части и проверить

 SELECT * FROM lap WHERE time_stamp BETWEEN '2019-03-02' AND '2019-03-03';
  

Комментарии:

1. если я использую эту функцию, будут показаны не все данные. он должен включать время

2. я использовал тот же запрос и получаю результат. и без учета времени, если вы укажете дату, он автоматически получит все данные со времени начала от 1 до 24 часов. вы также можете изменить формат на гггг-мм-дд и проверить

3. я боюсь, что мне придется изменить все свои данные, если я должен изменить формат даты

4. В этом случае вы можете использовать функцию sql dateformat, например, ВЫБЕРИТЕ DATE_FORMAT (имя вашего столбца, «%d %m %Y») ИЗ your_table_name;

Ответ №2:

попробуйте

  SELECT * FROM lap WHERE time_stamp BETWEEN DATE_FORMAT('02-03-2019 00:00:00', '%d-%m-%Y %h:%m:%s') AND DATE_FORMAT('03-03-2019 23:59:59', '%d-%m-%Y %h:%m:%s');
  

формат даты и времени mysql смотрите по ссылке ниже
https://dev.mysql.com/doc/refman/8.0/en/datetime.html

Если вы передаете дату в другом формате, лучше вам изменить формат.

Комментарии:

1. я пробую этот код, но, к сожалению, он показывает нулевой результат.