You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从MySQL的articles表获取最近7天数据?查询语句故障求助

解决获取最近7天Unix时间戳记录的SQL问题

嘿,你的问题根源在于数据类型不匹配:timestmp字段是用time()生成的Unix秒级时间戳(整数类型),而NOW()返回的是MySQL的datetime类型,直接把这两种类型做减法比较,MySQL的隐式转换不会按照你预期的方式工作,所以语句无法正确执行。

这里给你两种可行的解决方案,优先推荐第一种(更高效):

方案1:将时间区间转换为Unix时间戳(推荐)

使用UNIX_TIMESTAMP()函数把NOW() - INTERVAL 7 DAY转换成和timestmp同类型的秒级时间戳,这样就能正确比较了:

SELECT COUNT(*) FROM `articles` WHERE `timestmp` > UNIX_TIMESTAMP(NOW() - INTERVAL 7 DAY);

如果你习惯用168小时来表示7天,也可以这么写:

SELECT COUNT(*) FROM `articles` WHERE `timestmp` > UNIX_TIMESTAMP(NOW() - INTERVAL 168 HOUR);

这种方法的优势是:只转换右侧的常量值,不会影响timestmp字段的索引使用,查询效率更高。

方案2:将Unix时间戳转换为datetime(不推荐,可能影响索引)

如果你一定要用datetime类型比较,可以用FROM_UNIXTIME()把timestmp转换成datetime,但这样会导致timestmp上的索引失效(如果有索引的话),查询速度会变慢:

SELECT COUNT(*) FROM `articles` WHERE FROM_UNIXTIME(`timestmp`) > NOW() - INTERVAL 7 DAY;

额外说明

time()函数生成的是秒级的Unix时间戳,而MySQL的UNIX_TIMESTAMP()默认返回的也是秒级结果,两者完全匹配,所以方案1能精准筛选出最近7天的记录。

内容的提问来源于stack exchange,提问作者Mr. Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:26:26