Ваш запрос использует неправильный синтаксис:
WHERE item_code='msft234' OR item_code='hp550x'
AND transact_date>=STR_TO_DATE('06-07-2013','%d-%m-%Y')
AND transact_date<=STR_TO_DATE('12-07-2013','%d-%m-%Y')
, так и приоритет выше, это означает, что оно будет выполнено, если либо вы получите hp550x в этот интервал дат, или вы получаете msft234
независимо от даты.
В круглых скобках необходимо поместить коды : (item_code='..' OR item_code='..' OR ..)
или использовать IN
: например.
SELECT * FROM transact
WHERE item_code IN ('msft234', 'hp550x')
AND transact_date BETWEEN
STR_TO_DATE('06-07-2013','%d-%m-%Y')
AND
STR_TO_DATE('12-07-2013','%d-%m-%Y')
Кроме того, в зависимости от типа выбранного для полой даты, считаю, что на сегодняшний день, чтобы быть «меньше или равно, чем 12-07-2013», она должна быть меньше или равен 12-07 -2013 в 00:00, т. Е. Почти последняя дата, которая будет соответствовать 11-07-2013 в 23:59:59.
Таким образом, «меньше или равно 12-07» на самом деле никогда не выбирайте ни одной строки с 12-07-2013, если она не была вставлена точно в полночь.
Если вы вставляете строки только с указанием датирования, то это, скорее всего, будет работать - строки будут вводиться в полночь и совпадают в полночь. Но если (некоторые) строки вводятся с полным datetime, например. потому что они типа datetime и обновлены с NOW()
, тогда они будут не матч.
, пожалуйста, разместите здесь всю необходимую информацию и не просто ссылайтесь на нее. – mnagel