您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

从时间戳列中选择当前月份记录mysql

从时间戳列中选择当前月份记录mysql

一种更好的索引友好型查询日期范围内数据的方法

SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
  FROM table1
 WHERE timestampfield >= UNIX_TIMESTAMP(LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH)
   AND timestampfield <  UNIX_TIMESTAMP(LAST_DAY(CURDATE()) + INTERVAL 1 DAY);

您不对列数据应用任何函数,而是在条件的右侧进行所有必要的计算(它们是常量,并且仅在执行后评估一次)。这样,您就可以使MysqL受益于该timestampfield列上可能具有的索引。

SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
  FROM table1
 WHERE MONTH(FROM_UNIXTIME(timestampfield)) = MONTH(CURDATE())
   AND YEAR(FROM_UNIXTIME(timestampfield)) = YEAR(CURDATE())

尽管此查询产生正确的结果,但实际上使您可能在timestampfield列上使用的索引的正确使用无效(这意味着MysqL将被强制执行全扫描)

这是 演示

MySQL 2022/1/1 18:14:28 有609人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶