17
offers.date = CURDATE() 

我目前拥有的。

它抢了今天的报价,但我也想抢昨天的订单。

如果不指定昨天的日期,我该怎么做?

4

4 回答 4

47

要使用 CURDATE 减去或加上一个间隔(例如昨天),您可以使用DATE_ADD函数

SELECT DATE_ADD(CURDATE(), INTERVAL -1 DAY);

因此,在您的情况下,您可以像这样使用它:

WHERE offers.date = CURDATE() OR offers.date = DATE_ADD(CURDATE(), INTERVAL -1 DAY)

或者,您还可以使用 DATE_SUB() 函数,而不是使用负间隔,而是使用相同的间隔但为正。

因此,DATE_ADD(CURDATE(), INTERVAL -1 DAY)将成为DATE_SUB(CURDATE(), INTERVAL 1 DAY)

于 2012-11-26T19:55:46.950 回答
12

在我看来,只说以下内容会更简单

WHERE offers.date >= CURDATE() - INTERVAL 1 day
于 2014-07-01T14:50:13.327 回答
5

基于@edwardmp 的回答,我发现这种语法比使用更易读DATE_ADD()

current_date() - interval 1 day

此外,我会使用IN而不是OR使它更容易与你的 where 子句的其余部分结合起来,而不必过多担心括号:

WHERE offers.date in (current_date(), current_date() - interval 1 day)
于 2012-11-26T20:18:49.330 回答
0

它也可能是

  offers.date between (current_date() - interval 1 day) and current_date

注意:如果 offer.date 是日期时间值,这将失败,因为 (2017-01-02) < (2017-01-02 12:34:56) 由于 2017-01-02 实际上是 2017-01- 02 00:00:00。

于 2017-06-08T22:45:44.227 回答