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

如何在MS SQL Server和MySQL中查询当前月份之前的所有数据

以下是两种数据库的可运行查询方案及注意事项,默认业务表名为your_table,日期筛选字段为create_time,可根据实际场景替换:

MS SQL Server 实现方案

查询语句

SELECT * 
FROM your_table
WHERE create_time < DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0);

注意事项

  • 语句中DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)用于计算当前月第一天的0点,避免使用对字段做函数运算的写法(如YEAR(create_time)/MONTH(create_time)),防止索引失效。
  • 原生兼容datetime、datetime2、smalldatetime等所有SQL Server日期类型,无需额外做类型转换。
  • 天然支持跨年场景,无需额外加年份判断逻辑,1月时可正常筛选上一年12月及更早的所有数据。
MySQL 实现方案

查询语句

SELECT *
FROM your_table
WHERE create_time < DATE_FORMAT(CURDATE(), '%Y-%m-01 00:00:00');

注意事项

  • 若create_time为date类型(无时分秒),可简化条件为create_time < DATE_FORMAT(CURDATE(), '%Y-%m-01')即可正常运行。
  • 禁止使用对create_time做函数转换的筛选逻辑,例如PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(create_time, '%Y%m')) >0,该写法无法命中日期字段索引,数据量超过10万级时性能会出现明显下降。
  • 语句兼容MySQL 5.6及以上所有版本,低版本可替换CURDATE()为CURRENT_DATE效果完全一致。
通用说明
  • 所有语句默认查询全表字段,可将*替换为实际需要查询的业务字段,进一步提升查询性能。
  • 若有额外业务筛选条件,直接在WHERE子句后追加AND条件即可,不影响日期筛选逻辑的正确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:36:03