如何在查询中将日期添加到MYSQL中的日期

时间:2018-01-09 12:44:54

标签: mysql datetime

我正在尝试在查询中将MYSQL中的日期添加5天。这就是我所做的:

但这并没有显示已经结束的销售清单。有人可以告诉我我在哪里犯了错误。

3 个答案:

答案 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())

但是,第一种配方优于第二种配方有两个原因。

  1. 如果您在WHERE子句中提及end_date而未将其包含在计算中,则您的查询可以利用该列上的索引并且可以更快地运行。
  2. 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