我有一个表,其中有fromdate和todate字段。我一直在尝试获取特定日期的数据。
下面是我一直没有运气尝试过的查询,
SELECT *
FROM install
WHERE customer != ''
AND billtype = 'QUARTERLY'
AND (STR_TO_DATE (fromdate, ' %m-%Y') + INTERVAL 3 MONTH=STR_TO_DATE('01-01-2018', ' %m-%Y'))
例如
如果他的用户选择2019年1月,则应显示任何具有fromdate + 3个月的行。 有什么建议
答案 0 :(得分:1)
尝试使用日期不等式,以避免调用STR_TO_DATE
:
SELECT *
FROM install
WHERE
customer <> '' AND
billtype = 'QUARTERLY' AND
DATE_ADD(fromdate, INTERVAL 3 MONTH) BETWEEN '2018-01-01' AND '2018-01-31';
仅供参考,您当前的语法已关闭,这就是为什么它无法按预期工作的原因。
但实际上,表达逻辑的更好方法是从2018年1月起减去 3个月:
SELECT *
FROM install
WHERE
customer <> '' AND
billtype = 'QUARTERLY' AND
fromdate BETWEEN '2017-10-01' AND '2017-10-31';
此版本的查询也是SARGable,这意味着仍可以使用包含fromdate
列的索引。