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

MySQL中INT类型时间戳字段匹配CURDATE()查询无结果求助

解决MySQL INT类型时间戳查询今日数据的问题

嘿,我来帮你搞定这个问题!你的核心问题出在INT类型的秒级时间戳和MySQL日期函数的交互逻辑上,下面一步步拆解分析:

为什么之前的语句都失效了?

你的r_insert_time是存储秒级时间戳的INT字段(比如1547043955对应某个具体的年月日时分秒),但你用的DATE()函数不会自动把这个数字当成时间戳处理——MySQL会把这个INT值直接转成字符串,然后尝试解析成YYYYMMDD格式的日期,这显然和时间戳的含义完全不搭,最终得到的是无效日期(甚至是NULL),自然匹配不上CURDATE()。

比如你执行SELECT DATE(1547043955);,得到的结果会是NULL,因为MySQL没法把"1547043955"解析成合法日期,所以DATE(r_insert_time) = CURDATE()永远不成立,返回0条结果。

正确的查询方式

方式1:先转时间戳为日期时间,再提取日期(直观但性能稍差)

用FROM_UNIXTIME()函数把INT时间戳转换成MySQL能识别的日期时间格式,再用DATE()提取日期部分:

SELECT COUNT(*) FROM rdv WHERE u_id = ? AND DATE(FROM_UNIXTIME(r_insert_time)) = CURDATE();

方式2:用时间戳范围查询(推荐,可利用索引)

如果你的r_insert_time字段有索引,这种方式性能更好,因为避免了对每一行数据做函数转换:

SELECT COUNT(*) FROM rdv 
WHERE u_id = ? 
  AND r_insert_time >= UNIX_TIMESTAMP(CURDATE()) 
  AND r_insert_time < UNIX_TIMESTAMP(CURDATE() + INTERVAL 1 DAY);

解释一下:

  • UNIX_TIMESTAMP(CURDATE())返回今天00:00:00对应的秒级时间戳
  • CURDATE() + INTERVAL 1 DAY是明天的日期,转成时间戳就是明天00:00:00的时间戳
  • 用>=和<就能精准匹配今天一整天的所有时间戳

验证方法

你可以先执行这条语句,确认时间戳转换后的日期是否正确:

SELECT 
  r_insert_time,
  FROM_UNIXTIME(r_insert_time) AS datetime,
  DATE(FROM_UNIXTIME(r_insert_time)) AS date,
  CURDATE() AS today
FROM rdv 
WHERE u_id = ? 
LIMIT 10;

这样就能直观看到你的时间戳对应的日期是不是今天,排查是否有其他问题(比如u_id不匹配、时间戳时区问题等)。

内容的提问来源于stack exchange,提问作者medk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:34:46