我正在尝试在查询中将MYSQL中的日期添加5天。这就是我所做的:
但这并没有显示已经结束的销售清单。有人可以告诉我我在哪里犯了错误。
答案 0 :(得分:4)
看起来你想要end_date
晚于五天的行。
最好的方法是使用
WHERE end_date >= CURDATE() - INTERVAL 5 DAY
将整数添加到日期的业务在MySQL中不起作用(这是Oracle的事情)。因此,您需要使用INTERVAL n unit
语法。
你会注意到我上面的WHERE子句在功能上等同于
WHERE DATE(end_date) + INTERVAL 5 DAY >= DATE(NOW())
但是,第一种配方优于第二种配方有两个原因。
end_date
而未将其包含在计算中,则您的查询可以利用该列上的索引并且可以更快地运行。DATE(NOW())
和CURDATE()
都指的是今天的第一个时刻(午夜)。但CURDATE()
稍微简单一些。答案 1 :(得分:0)
要修复原始查询,可以将DATE_ADD与INTERVAL关键字一起使用:
SELECT
*
FROM
sales
INNER JOIN
partner ON user_id = idpartner
WHERE
DATE_ADD(end_date, INTERVAL 5 DAY) >= DATE(NOW())
ORDER BY end_date ASC
LIMIT 0 , 50000
说,我不建议在列上应用DATE_ADD等函数,因为这意味着数据库将无法在end_date上使用索引。因此,我会将查询修改为:
SELECT
*
FROM
sales
INNER JOIN
partner ON user_id = idpartner
WHERE
end_date <= DATE_ADD(DATE(NOW()), INTERVAL 5 DAY)
ORDER BY end_date ASC
LIMIT 0 , 50000
如您所见,在第二种选择中,所有函数都应用于常量而不是列(end_date
)。
答案 2 :(得分:0)
你可以试试 DATE_ADD()这里是 Link
Select DATE_ADD(DATE_FORMAT(NOW(),'%Y-%m-%d'),INTERVAL 1 DAY) FROM DUAL