2013-05-30 3 views
0

У меня есть таблица, называемая расписанием, которая содержит столбцы день, месяц, год и т. Д. Мне нужно выбрать записи между $ datefrom и $ dateto. Вот мой код, который не работает :(MySQL выбор всех дат между двумя датами

SELECT * FROM schedules WHERE CONCAT(year, month, day) BETWEEN $datefrom AND $dateto 

Я не уверен, если это правильно. Пожалуйста, помогите.

+1

Вам может понадобиться, чтобы бросить значения в качестве даты. Использование 'between' со строками может иметь непредсказуемые результаты. http://stackoverflow.com/questions/8076236/mysql-between-operator-with-dates – showdev

+0

CAST (CONCAT (год, месяц, день) AS DATE) – sashkello

ответ

1

Как showdev уже сказал в комментарии, вы должны бросить строку, которая возвращается из CONCAT().Но считайте, что индекс не может быть использован для этого.

Я предлагаю вам создать дополнительный столбец в таблице с полной датой. Я не знаю, разделили ли вы дату на 3 столбцы из соображений производительности, но попробуйте, если вам достаточно одного столбца. Обычно он достаточно быстрый (при индексировании).

Если вы не хотите, чтобы сделать это, и хотите использовать индексы (если они вообще существуют на этих 3-х колонок) вы должны написать запрос, как это:

SELECT * FROM schedules WHERE 
`year` BETWEEN YEAR($datefrom) AND YEAR($dateto) 
AND `month` BETWEEN MONTH($datefrom) AND MONTH($dateto) 
AND `day` BETWEEN DAY($datefrom) AND DAY($dateto) 
Смежные вопросы