2014-02-16 3 views
-1

ОК, вот что я пытаюсь выбраться из своей БД. У меня есть два поля даты прилета и вылета, и я довольно осторожен, как исходить отсюда. Мне нужно проверить для прибытия date> = '01/01/2013 и уйти < = '02/15/2014', однако, когда я запускаю это, я, очевидно, получаю 2012 год в результатах моего отображения - из-за того, как я структурировал свой запрос - Что Мне нужно просто выйти из моего стола по году или времени, то есть. 01/01/2013 к 02/14/2014mysql query между двумя полями даты

с помощью PHPMyAdmin для запроса

+0

Каков ваш запрос? У вас есть что-то вроде 'arrivaldate> = '2013-01-01'' – cornelb

+0

Что такое ** тип столбца ** для столбца даты? – Kermit

ответ

0

Если вы сравниваете два различных типов данных (в вашем случае - date столбцы и строки литералов), вы не должны полагаться на базу данных для их преобразования. Как вы видели в своем usecase, вы получили даты, преобразованные в строки, и сравнивали лексикографически. Вместо этого вы должны явно преобразовать литералы date с, и сделать все сравнения этого типа данных:

SELECT * 
FROM my_table 
WHERE arrivaldate >= STR_TO_DATE('01-01-2013', '%D-%M-%Y') 
AND departdate <= STR_TO_DATE('15-02-2014', '%D-%M-%Y') 
+0

'Предупреждение | 1411 | Неверное значение даты и времени: '01 -01-2013 'для функции str_to_date' –

+0

Да, это было неаккуратно от моего имени - попробуйте сейчас. – Mureinik

+0

Yea Iknew that - я просто не мог понять, почему - спасибо за этот ответ - теперь имеет смысл – user3316563

0

Попробуйте это:

WHERE 
    STR_TO_DATE(arrivaldate, '%m/%d/%Y') >= '01/01/2013' 
    AND 
    STR_TO_DATE(departdate, '%m/%d/%Y') <= '02/15/2014' 

Не забудьте использовать:

  • '%m' (нижний регистр m) есть за 2-значный месяц
  • '%d' (нижний чехол d) для даты 2 значного
  • '%Y' (верхний регистр Y) для 4-значного года

Это всегда хороший выбор, чтобы определить конкретные типы данных даты на колонны для хранения ценностей, как date, time и date and time значений.

Допустимые типы данных: date, datetime и timestamp.

+0

thanx - я дам ему попробовать – user3316563

+0

@ user3316563: исправлена ​​часть ошибки. –

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