Как выбрать данные между диапазоном дат в MySQL. Моя datetime
колонка представлена в 24-часовом формате времени зулу.
select * from hockey_stats
where game_date between '11/3/2012 00:00:00' and '11/5/2012 23:59:00'
order by game_date desc;
Ничего не возвращает, несмотря на наличие данных между этими периодами времени. Должен ли я принудительно вводить значения в полях «от» и «до» для datetime
ввода запроса?
game_date
?Ответы:
Вам необходимо обновить формат даты:
select * from hockey_stats where game_date between '2012-03-11 00:00:00' and '2012-05-11 23:59:00' order by game_date desc;
источник
where game_date >= '2012-03-11' and game_date < '2012-05-12'
- это наиболее точный способ определения диапазона дат, который будет работать с любым уровнем точности времени от даты до долей секунды.Вот простой способ использования функции даты:
select * from hockey_stats where date(game_date) between date('2012-11-03') and date('2012-11-05') order by game_date desc
источник
date(game_date)
будет выполняться сравнение с вычисленным значением , а не с полем - в результате не будет использоваться индекс и будет затронута каждая отдельная строка (то есть полное сканирование таблицы)!game_date
. Даже без индекса таблица должна быть среднего размера для заметной разницы в производительности. Что-то в названииhockey_stats
подсказывает мне, что это не очень большой стол.Простой способ:
select * from hockey_stats where game_date >= '2012-03-11' and game_date <= '2012-05-11'
источник
Вероятно, вам нужно использовать функцию STR_TO_DATE :
select * from hockey_stats where game_date between STR_TO_DATE('11/3/2012 00:00:00', '%c/%e/%Y %H:%i:%s') and STR_TO_DATE('11/5/2012 23:59:00', '%c/%e/%Y %H:%i:%s') order by game_date desc;
(если game_date - это строка, вам может потребоваться использовать для нее STR_TO_DATE)
источник
Формат даты MySQL следующий: YMD. Вы используете Y / M / D. Это неправильно. измените свой запрос.
Если вы вставите дату, например, Y / M / D, в базу данных будет вставлено нулевое значение.
Если вы используете PHP, и дата, которую вы получаете из формы, выглядит как Y / M / D, вы можете заменить это с помощью оператора.
источник
Проще говоря, его можно запросить как
select * from hockey_stats where game_date between '2018-01-01' and '2018-01-31';
Это работает, если время не заботит.
Считая время, также поступают следующим образом:
select * from hockey_stats where (game_date between '2018-02-05 01:20:00' and '2018-02-05 03:50:00');
Обратите внимание, что это для сервера MySQL.
источник
Вы можете либо использовать функцию STR_TO_DATE, либо передать свои собственные параметры даты в зависимости от формата, который вы опубликовали:
select * from hockey_stats where game_date between STR_TO_DATE('11/3/2012 00:00:00', '%c/%e/%Y %H:%i:%s') and STR_TO_DATE('11/5/2012 23:59:00', '%c/%e/%Y %H:%i:%s') order by game_date desc;
Или просто используйте формат, в котором MySQL обрабатывает даты YYYY: MM: DD HH: mm: SS, и запросите как
select * from hockey_stats where game_date between '2012-03-11 00:00:00' and'2012-05-11 23:59:00' order by game_date desc;
источник
Вы должны искать дату, защищая от того, как вы вставляете эти данные game_date в свою базу данных .. например, если вы вставили значение даты на длинную или короткую дату.
SELECT * FROM hockey_stats WHERE game_date >= "6/11/2018" AND game_date <= "6/17/2018"
Вы также можете использовать МЕЖДУ :
SELECT * FROM hockey_stats WHERE game_date BETWEEN "6/11/2018" AND "6/17/2018"
просто как тот.
источник