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

PHP/MySQL如何查询指定年份的Datetime类型数据?

查询特定年份的Datetime数据解决方案

嘿,我来帮你搞定这个问题!既然你的date列是datetime类型,要筛选2015年的所有数据,有几种实用的方法,我给你详细说说:

方法一:用YEAR()函数直接匹配年份

这是最直观的写法,直接提取date字段的年份进行对比:

SELECT * FROM table WHERE YEAR(`date`) = 2015;
  • 优点:写法简洁,容易理解
  • 注意点:如果date列上创建了索引,这种函数操作列的写法会导致索引失效,数据库需要全表扫描。如果你的表数据量不大,这个方法完全够用;但数据量多的话,不推荐用这个。

方法二:指定精确时间范围(推荐大表使用)

因为datetime包含日期和时间,2015年的时间范围是从2015-01-01 00:00:00到2015-12-31 23:59:59,我们可以直接用范围查询:

SELECT * FROM table 
WHERE `date` >= '2015-01-01 00:00:00' 
AND `date` <= '2015-12-31 23:59:59';

更严谨的写法是用“小于下一年的第一天”,避免漏掉毫秒级的时间数据(比如2015-12-31 23:59:59.999):

SELECT * FROM table 
WHERE `date` >= '2015-01-01' 
AND `date` < '2016-01-01';
  • 优点:可以正常利用date列上的索引,查询效率极高,适合大表场景
  • 注意点:时间范围要写准确,第二种写法更稳妥,不用纠结最后一秒的精度问题

方法三:用DATE_FORMAT函数匹配年份

和YEAR()类似,通过格式化日期提取年份:

SELECT * FROM table WHERE DATE_FORMAT(`date`, '%Y') = '2015';
  • 特点:同样简洁,但和YEAR()一样存在索引失效的问题,适合小表使用

总结

如果你的表数据量较大,追求查询性能,优先用时间范围的写法;如果只是小表查询,图省事用YEAR()或者DATE_FORMAT都没问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:59:42