【发布时间】:2019-02-28 04:31:21
【问题描述】:
我有一个从 expressJS 注入 MySQL 的查询,但是当这些查询被执行时。有时我返回的数据不正确满足条件。
原文:
SELECT * FROM table
WHERE status = 'Invoiced'
AND (ordereddate between '2009-12-01' AND '2011-12-30')
OR (duedate between '2009-12-01' AND '2011-12-30');
结果:
Ordered Date Due Date Status
2009-11-18 2009-12-16 Invoiced
2009-11-18 2009-12-14 Cancelled
结果显示任何状态的项目正在被拉取,但满足日期条件。
试过了:
SELECT * FROM table
WHERE (status = 'Invoiced')
AND (ordereddate between '2009-12-01' AND '2011-12-30')
AND (duedate between '2009-12-01' AND '2011-12-30');
结果:
如果 ordereddate 或 duedate 超出日期范围,则该项目将被排除在结果之外。
改为AND而不是OR
试过了:
SELECT * FROM table
WHERE status = 'Invoiced'
AND (ordereddate AND duedate between '2009-12-01' AND '2011-12-30');
结果:
正确返回所有内容,除非 ordereddate 或 duedate 超出日期范围,否则该行将被排除在结果之外。
结合ordereddate 和duedate where 条件
试过了:
SELECT * FROM table
WHERE status = 'Invoiced'
AND (ordereddate OR duedate between '2009-12-01' AND '2011-12-30');
结果:
Ordered Date Due Date Status
2008-07-07 2008-07-28 Invoiced
2008-07-07 2008-07-25 Invoiced
2008-07-07 2008-07-23 Invoiced
这个似乎提取了正确的状态,但是日期不正确,它似乎提取了状态为 Invoiced 的任何内容,并且忽略了日期范围。
【问题讨论】:
-
您的最后两个表达式涉及
x AND ...和x OR ...- 在每种情况下,x都会测试真/假(非零/零)以得出一个值。也就是说,它真的不是你需要的。
标签: mysql node.js mariadb where between