使用MySQL获取CURDATE()和前一天的位置

Kar*_*rem 14 mysql

offers.date = CURDATE() 
Run Code Online (Sandbox Code Playgroud)

我现在拥有的东西.

它抓住今天的报价,但我也想抓住昨天的订单.

如何在不指定昨天的日期的情况下这样做?

edw*_*dmp 37

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

SELECT DATE_ADD(CURDATE(), INTERVAL -1 DAY);
Run Code Online (Sandbox Code Playgroud)

所以,在你的情况下你使用它像这样:

WHERE offers.date = CURDATE() OR offers.date = DATE_ADD(CURDATE(), INTERVAL -1 DAY)
Run Code Online (Sandbox Code Playgroud)

您也可以选择使用DATE_SUB()函数而不是负间隔使用相同的间隔但是为正.

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

  • @ murtaza.webdev在所有情况下都不起作用:如果CURDATE()是6月的第一个,减去1将导致6月0日..请参阅https://bugs.mysql.com/bug.php?id=3958 (3认同)

小智 10

在我看来,只是说下面的内容会更简单

WHERE offers.date >= CURDATE() - INTERVAL 1 day
Run Code Online (Sandbox Code Playgroud)


Ike*_*ker 6

基于@ edwardmp的答案,我发现这种语法比使用它更具可读性DATE_ADD():

current_date() - interval 1 day
Run Code Online (Sandbox Code Playgroud)

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

WHERE offers.date in (current_date(), current_date() - interval 1 day)
Run Code Online (Sandbox Code Playgroud)