MySQL日期显示结果今天/昨天/本周。

7
我正在从一个表中检索数据并显示所有记录的总和。我想要做的是显示今天、昨天和本月的记录总和。该表使用Unix时间戳格式(例如:1351771856)。
目前,我正在使用以下代码来显示今天的结果:
AND comment_date > UNIX_TIMESTAMP() - 24 * 3600";

但这只会给我过去24小时的结果。
例如:假设现在是周五下午5点,它会从周四下午5点到周五下午5点给我统计数据。
我想要的是:
- 昨天(在这种情况下是从昨天的00:00:00开始到23:59:59) - 今天的结果(00:00:00-23:59:59) - 上周的结果,从周一的00:00:00开始直到“今天”(也就是本例中的周五)。
我在MySQL文档中没有找到实现此目标的方法。

“real” 值具体指什么? - Anirudh Ramanathan
注释日期 = $今天 或 注释日期 = $昨天,注释日期 = $这个月 - Georgi Grancharov
没有“今天”或“昨天”的变量,您必须使用时间戳或其他日期类型(或如果使用datetime,则使用mysql日期差异)选择一定的时间段。我想您的方法是唯一查看结果的方式。 - Serg
3个回答

7
这段 MySQL 代码应该适用于您的情况:
// Today
AND DATE(from_unixtime(comment_date)) = CURRENT_DATE

// Yesterday
AND DATE(from_unixtime(comment_date)) =  DATE_SUB(CURRENT_DATE,INTERVAL 1 DAY)

// This week
AND YEARWEEK(from_unixtime(comment_date), 1) =  YEARWEEK(CURRENT_DATE, 1)

// This month
AND YEAR(from_unixtime(comment_date)) = YEAR(CURRENT_DATE)
AND MONTH(from_unixtime(comment_date)) = MONTH(CURRENT_DATE)

1
@vinculis 你需要在WEEK上检查年份,以免得到去年的同一周。此外,你需要将“1”作为第二个参数传递,以便在星期一获得一周的开始。 - Joachim Isaksson
嘿,我得等到这里的00:00才能测试“昨天”的功能。似乎存在时区问题,因为今天的字段中我得到了昨天的结果,而“昨天”的结果是前天的。我的服务器在美国,我在亚洲。我尝试将“date_default_timezone_set('Asia / Chongqing');”放入php中,但似乎没有任何效果。 - Georgi Grancharov
哦,是我的错误。更改为 DATE(CONVERT_TZ(from_unixtime(comment_date), 'GMT', 'CST')) = CURRENT_DATE - vinculis
嗯,现在没有错误,但是它显示了0个条目,而我刚刚创建了一个新条目(今天/ 2012年03月11日01:51 CST)-你有其他建议吗? - Georgi Grancharov
好的,如果其他人也遇到这个问题,我通过使用数字解决了我的问题:**'+08:00','-08:00'**,而不是使用UTC/CST等。@vinculis,再次感谢您的支持。 - Georgi Grancharov
显示剩余7条评论

0

只需使用这个:

AND comment_date > date_sub(current_date, interval 1 day)

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接