【问题标题】:MySQL select yesterday's dateMySQL选择昨天的日期
【发布时间】:2013-03-15 09:45:03
【问题描述】:

如果我有这样的约会:

'2013-03-25'

我想写一个 MySQL 查询,WHERE 是“昨天”,我该怎么做?

【问题讨论】:

标签: mysql sql date


【解决方案1】:

应该这样做:

WHERE `date` = CURDATE() - INTERVAL 1 DAY

【讨论】:

  • 如果比当前时间早一分钟怎么办?
  • 我不确定你在说什么。你能澄清一下吗?
  • 应该是curdate(),而不是now()? AFAIK,您的代码只有在时间完全匹配时才能工作
  • 我假设列类型为date,这可能不是真的。所以你的建议是一个好建议,而且更安全,所以我编辑了我的答案以使用它。
  • 如果dateDateTime,它应该是DATE(date) = CURDATE - INTERVAL 1 DAY ?
【解决方案2】:

我想你正在寻找:

DATE_ADD(date_column, INTERVAL -1 DAY)

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

【讨论】:

    【解决方案3】:

    获取昨天日期的一个简单方法是使用subdate() 函数:

    subdate(currentDate, 1)
    

    【讨论】:

      【解决方案4】:

      我总是不得不参考代码 sn-p 来重新理解这个问题。

      习惯上将日期时间以 UTC 格式存储在数据库中。但通常,在生成报告时,需要针对特定​​时区调整时间。

      这是我用来显示昨天选择的 sn-p,已针对太平洋时间进行了调整:

      SET @date_start = DATE_SUB((CURDATE() - INTERVAL 1 DAY), INTERVAL 8 HOUR);
      SET @date_end = DATE_SUB(CURDATE(), INTERVAL 8 HOUR);
      
      SELECT
          projects.token,
          projects.created_at as 'UTC created_at',
          DATE_SUB(projects.created_at, INTERVAL 8 HOUR) as 'Pacific created_at'
      FROM
          projects
      WHERE
          projects.created_at BETWEEN @date_start AND @date_end;
      

      注意:我在sn-p中设置了变量,这样更容易查看。当我编写最终查询时,我通常不使用变量。

      【讨论】:

        猜你喜欢
        • 2011-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-04
        • 1970-01-01
        • 2012-10-22
        相关资源
        最近更新 更多