0

我有这张表,我给出的查询返回错误的结果,我不确定问题出在哪里

  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')

在此处输入图像描述

4

4 回答 4

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')
于 2013-07-07T16:50:45.487 回答
0

(ítem_code = 'msft234' OR ítem_code = 'hp550x') AND STR_TO_DATE('06-07-2013','%d-%m-%Y') 和 STR_TO_DATE('12-07-2013','% d-%m-%Y')

于 2013-07-07T16:55:01.330 回答
0

为了安全起见,我将使用 2 ()

(ítem_code = 'msft234' OR ítem_code = 'hp550x') AND (transact_date BETWEEN STR_TO_DATE('06-07-2013','%d-%m-%Y') 和 STR_TO_DATE('12-07-2013',' %d-%m-%Y'))

于 2013-07-07T16:58:45.243 回答
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')

由于 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”​​的日期,它必须在 00:00 小于或等于 12-07-2013,即,几乎匹配的最新日期是 2013 年 7 月 11 日 23:59:59。

因此,“小于或等于 12-07”实际上永远不会选择 12-07-2013 中的任何行,除非它恰好在午夜插入。

如果您仅通过指定date来插入行,那么它很可能会起作用 - 这些行将在午夜输入并在午夜匹配。但是,如果(某些)行使用完整的日期时间输入,例如因为它们是日期时间类型并使用 更新NOW(),那么它们将匹配。

于 2013-07-07T16:59:00.867 回答