2013-11-02 2 views
0

Я пытающимся получить записи из базы данных MySQL на основе определенного диапазона дат, используя следующий запрос:Работы с датой MySQL диапазоном

$query = "SELECT * FROM data WHERE" . 
      "date between '11/02/13' and '11/31/13' "; 

Проблемы я испытываю то, что этот запрос не дискриминировать Based на год. Другими словами, он возвращает записи за ноябрь 2014 года, а также в 2013 году. Я уверен, что это связано с моей нехваткой знаний, когда дело доходит до работы с датами mysql, поэтому, если кто-то может указать мне в правильном направлении, это будет очень оценили!

+0

Что такое тип данных 'date'? – geomagas

+0

дата, хотя изначально был varchar –

+1

Я догадываюсь, что конверсия перепутала все. Пожалуйста, разместите несколько примеров данных, которые воспроизводят проблему. – geomagas

ответ

0

дурных к магазину дате как VARCHAR, но вы можете использовать STR_TO_DATE для преобразования строки в датировать

SELECT * FROM data WHERE 
STR_TO_DATE(`date`,'%m/%d/%y') between '11/02/13' and '11/31/13' 

STR_TO_DATE

+0

Да, честно говоря, я хотел бы сохранить дату как дату, но я использую jquery date picker на лицевой стороне, и он форматирует даты как mm/dd/yy. –

+0

Вы пробовали этот запрос? и вы можете изменить формат datepicker также см. демонстрацию http://jqueryui.com/datepicker/#date-formats –

+0

Я сделал, и я не нашел никаких результатов –

0

Я думаю, вам придется приводить строки даты к дате:

CAST('2003-01-01' AS DATE) 
0
SELECT * FROM data WHERE 
      date between '11/02/13' and '11/31/13' GROUP BY YEAR(date) 
0

В MySQL вам нужно использовать другой формат даты.

$query = "SELECT * FROM data WHERE" . "date between '2013-11-02' and '2013-11-31' "; 
0

Превращение date поля из VARCHAR на дату, как указано в вашем комментарии, привести к неправильной интерпретации значений дат, MySQL, as this fiddle proves.

Для того, чтобы правильно преобразовать его в поле даты, вы должны переключить его обратно в VARCHAR, а затем сделать:

update data set date=date_format(STR_TO_DATE(`date`,'%m/%d/%y'),'%Y-%d-%m') 

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

С тех пор, используйте следующий синтаксис для проверки диапазонов дат:

SELECT * FROM data WHERE date between '2013-02-11' and '2013-31-11' 

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

Смежные вопросы