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

如何根据用户输入的月份和年份查询MySQL对应日期数据生成月度报表

MySQL按指定年月筛选日期数据的实现方案

方案1:性能最优(推荐)

不对表字段做函数运算,可命中日期字段的索引,适合数据量较大的业务场景:

SELECT * FROM 你的表名
WHERE 日期字段 >= STR_TO_DATE(CONCAT(?, '-', ?, '-01'), '%Y-%m-%d')
  AND 日期字段 < DATE_ADD(STR_TO_DATE(CONCAT(?, '-', ?, '-01'), '%Y-%m-%d'), INTERVAL 1 MONTH);

?按顺序分别绑定用户提交的年份、月份、年份、月份参数即可。

方案2:简易实现

写法更简洁,适合数据量较小、日期字段未建索引的场景:

SELECT * FROM 你的表名
WHERE YEAR(日期字段) = ? 
  AND MONTH(日期字段) = ?

?按顺序分别绑定用户提交的年份、月份参数即可。

特殊场景兼容

如果你的日期字段实际为VARCHAR类型,存储的是%d-%m-%Y格式的字符串,需要先用STR_TO_DATE转成日期类型再筛选:

-- 简易写法示例
SELECT * FROM 你的表名
WHERE YEAR(STR_TO_DATE(日期字段, '%d-%m-%Y')) = ? 
  AND MONTH(STR_TO_DATE(日期字段, '%d-%m-%Y')) = ?

注意事项

  • 提前校验用户提交的参数合法性:月份取值范围为1-12,年份为合法的数值格式
  • 所有动态参数请使用预编译绑定,不要直接拼接SQL字符串,避免SQL注入风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 08:54:04