我有这个表,我给出的查询返回错误的结果,我不确定问题出在哪里
- 日期比较
或
- 查询的结构
如果图像中不清楚,则查询为:
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')
最佳答案
您的查询使用了错误的语法:
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')
由于AND优先级较高,这意味着如果您在该日期间隔内获得hp550x,或您获得msft234
,则满足该条件> 无论日期。
您必须将OR
'ed的商品代码放在括号中:(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 中的任何行,除非恰好是在午夜插入的。
如果您仅通过指定日期来插入行,那么它很可能会起作用 - 行将在午夜输入并在午夜匹配。但是,如果(某些)行输入了完整的日期时间,例如因为它们是日期时间类型并使用 NOW()
进行更新,所以它们将不匹配。
关于php - mysql 日期比较查询给出错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17514112/