【发布时间】:2013-03-15 09:45:03
【问题描述】:
如果我有这样的约会:
'2013-03-25'
我想写一个 MySQL 查询,WHERE 是“昨天”,我该怎么做?
【问题讨论】:
如果我有这样的约会:
'2013-03-25'
我想写一个 MySQL 查询,WHERE 是“昨天”,我该怎么做?
【问题讨论】:
应该这样做:
WHERE `date` = CURDATE() - INTERVAL 1 DAY
【讨论】:
curdate(),而不是now()? AFAIK,您的代码只有在时间完全匹配时才能工作
date,这可能不是真的。所以你的建议是一个好建议,而且更安全,所以我编辑了我的答案以使用它。
date 是DateTime,它应该是DATE(date) = CURDATE - INTERVAL 1 DAY ?
我想你正在寻找:
DATE_ADD(date_column, INTERVAL -1 DAY)
见https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
【讨论】:
获取昨天日期的一个简单方法是使用subdate() 函数:
subdate(currentDate, 1)
【讨论】:
我总是不得不参考代码 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中设置了变量,这样更容易查看。当我编写最终查询时,我通常不使用变量。
【讨论】: