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

如何仅通过年份查询数据库中DATETIME字段对应的行?

嘿,这个问题我太懂了!你现在的写法直接把dateCreated等于'2020'肯定查不到数据——毕竟dateCreated是DATETIME类型,存的是带时分秒的完整时间(比如2020-05-08 14:30:34),直接匹配字符串'2020'完全对不上。给你几个在Yii框架里可行的解决方案:

方案1:用Yii封装的year()查询条件(最推荐)

Yii的ActiveQuery专门提供了针对日期时间字段的年份筛选方法,写法简洁还安全:

$records = MedicalRecord::find()
    ->where(['year', 'dateCreated', 2020])
    ->all();

这个方法会自动生成对应的SQL(比如MySQL里的YEAR(dateCreated) = 2020),还能帮你避免SQL注入问题,是最规范的写法。

方案2:时间范围匹配(更利于索引命中)

如果你的dateCreated字段有索引,用范围查询的效率会更高,直接匹配该年份的首尾时间:

$startOfYear = '2020-01-01 00:00:00';
$endOfYear = '2020-12-31 23:59:59';

$records = MedicalRecord::find()
    ->where(['between', 'dateCreated', $startOfYear, $endOfYear])
    ->all();

这种写法让数据库能直接利用字段索引,查询速度会比调用YEAR()函数更快。

方案3:原生SQL条件(适合复杂自定义场景)

要是你需要更灵活的自定义逻辑,也可以直接写原生SQL的条件,但记得一定要用参数绑定防止注入:

$records = MedicalRecord::find()
    ->where('YEAR(dateCreated) = :targetYear', [':targetYear' => 2020])
    ->all();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:12:31