Между в MySQL, где пункт не работает

Я пытаюсь выбрать данные из диапазона дат, используя BETWEEN в предложении, где, но это не возвращает правильный результат. Поле даты находится в формате 'mm/dd/YYYY' и тип varchar
Мой запрос,

select * from time_track where track_date between '01/01/2015' and '01/21/2015'

Но результат содержит данные с 2014 года.

Кто-нибудь может мне помочь, пожалуйста

0

Решение

Вам необходимо преобразовать строку даты в реальную дату

select * from time_track
where STR_TO_DATE(track_date ,'%d/%m/%Y') between '2015-01-01' and '2015-01-21'

Или даже лучше использовать тип данных даты для этого столбца.

Тогда вам не нужно конвертировать данные в ваших запросах, и вы можете использовать индексы, что делает их очень быстрыми.

7

Другие решения

Я получил ответ.

SELECT * FROM `time_track` where DATE_FORMAT(STR_TO_DATE(track_date, '%c/%d/%Y'), '%Y-%m-%d') between '2015-01-01' and '2015-01-21'
1

Попробуйте этот формат
выберите * из time_track, где track_date> = ‘2015-01-01 00:00:00’ И track_date <= ‘2015-01-01 00:00:00’

0

неверный формат вашей даты.
Вы должны использовать этот формат в вашем запросе: гггг-мм-дд.

выберите * из time_track, где track_date между ‘2015-01-01’ и ‘2015-01-21’

Marco

0

Сначала конвертируйте две даты, которые вы выбрали

$from=strtotime(date("Y-m-d H:i:s", strtotime($yourfromdate)))
$to=strtotime(date("Y-m-d H:i:s", strtotime($yourtodate)))

select * from time_track where track_date>='$from' and track_date<='$to'
0

Чтобы MySQL между предложением работал ожидаемым образом, идеальными значениями будут целое число, дата, время или дата / время. Попробуйте изменить тип данных с varchar на datetime. Это сделало бы вашу работу по сравнению.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector