2011-02-04 7 views
4

Эй, ребята. Я получаю некоторые странные результаты от использования BETWEEN в моем sql-запросе, и мне интересно, может ли кто-нибудь помочь мне понять, почему я получаю результаты, которые получаю.MySQL выбрать диапазон дат диапазон

Я ищу диапазон дат в формате dd/mm/yyyy. Поэтому я хочу выбрать все записи в пределах определенного диапазона дат.

$dbSearchRecords_result = "SELECT * FROM $tbl_name WHERE Date BETWEEN '$DateFrom_order' AND '$DateTo_order'"; 

$dbSearchRecords_result = mysql_query($dbSearchRecords_result); 

я затем вызвать результаты в то время как заявление из массива

while ($row = mysql_fetch_array($dbSearchRecords_result)){ 

Теперь, если я ищу BETWEEN 12/02/2011 14/02/2011 есть дата возвращается с 13/12/2010.

Тем не менее, если я ищу 12/02/2011 13/02/201. Я не получаю результат 13/12/2010.

Любые идеи были бы очень признательны.

Cheers.

+1

Вы уверены, что ваши переменные даты фактически отформатирован как собственные даты? – willdanceforfun

+0

Вы проверили, что сгенерированный оператор SQL из PHP - это то, что вы ожидали? – macarthy

+0

@ KeenLearner. Я только что понял, что это довольно глупо. Я уверен, что это главная проблема. Спасибо друг. –

ответ

6

Оператор BETWEEN, скорее всего, читать ваши диапазоны как строки. From the book:

Для достижения наилучших результатов при использовании BETWEEN с указанием даты или времени значений, используйте CAST() явно преобразовать значения в нужного типа данных. Примеры: Если вы сравниваете значение DATETIME с двумя значениями DATE , преобразуйте значения DATE в значения DATETIME. Если вы используете строку константу, такую ​​как «2001-1-1» в сравнении с DATE, используйте строку .

Итак, попробуйте:

SELECT * FROM `mytable` 
WHERE `date` BETWEEN CAST('2011-01-02' AS DATE) AND CAST('2011-12-02' AS DATE) 
+0

Спасибо. Метод CAST отлично работал –

5

значения потребности в MySQL в этом формате, чтобы сделать правильное сравнение:

YYYY-MM-DD 

вы могли бы использовать STR_TO_DATE, чтобы преобразовать строку в нужный формат.

Плюс, очевидно, поле Date должно быть DATE или DATETIME.

1

пытаются форматировать значения, как DATE .. как в

$dbSearchRecords_result = "SELECT * FROM $tbl_name WHERE Date BETWEEN DATE('$DateFrom_order') AND DATE('$DateTo_order')"; 
Смежные вопросы