2013-07-07 6 views
0

У меня есть эта таблица и запрос я даю возвращает неправильные результаты, я не уверен, где проблемадата MySQL сравнить запрос дает неправильные результаты

  1. финиковые сравнения

или

  1. описание страны

Запрос, если не ясен в изображении:

select * from transact 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') 

enter image description here

+1

, пожалуйста, разместите здесь всю необходимую информацию и не просто ссылайтесь на нее. – mnagel

ответ

0

Ваш запрос использует неправильный синтаксис:

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(), тогда они будут не матч.

+0

благодарит много. Да, тип transact_date имеет тип DATE, и используется только дата – Nilayan

+0

OK. Это просто, видишь ли, я однажды совершил эту ошибку, и мне потребовалось некоторое время, чтобы даже понять, что это было :-) – LSerni

0

поставить условия запись между()

(ítem_code = 'msft234' OR ítem_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') 
0

(ITEM_CODE = 'msft234' ИЛИ ​​ITEM_CODE = 'hp550x') и transact_date МЕЖДУ STR_TO_DATE (» 06-07-2013 ','% d-% m-% Y ') и STR_TO_DATE ('12 -07-2013', '% d-% m-% Y')

0

Для обеспечения безопасности я поставлю 2()

(ítem_code = 'msft234' ИЛИ ​​ítem_code = 'hp550x') И (transact_date BETWEEN STR_TO_DATE ('06 -07-2013 ','% d-% m-% Y ') и STR_TO_DATE ('12 -07-2013' , '% d-% m-% Y'))

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