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

如何自动设置SQL日期条件以每月提取上月全月数据?

自动提取上月所有记录的SQL条件修改方案

根据不同数据库的SQL方言,以下是实现自动提取上月记录的条件写法:

MySQL/MariaDB

直接计算上月的第一天和最后一天,或用更严谨的时间范围避免遗漏带时分秒的记录:

  • 基础写法(适用于仅日期类型):
AND efdtmov BETWEEN DATE_SUB(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH) 
                AND LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH))
  • 严谨写法(兼容datetime/timestamp类型,避免遗漏最后一天晚时段记录):
AND efdtmov >= DATE_SUB(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH) 
AND efdtmov < DATE_FORMAT(NOW(), '%Y-%m-01')

说明:DATE_FORMAT(NOW(), '%Y-%m-01')获取当月第一天,减1个月得到上月第一天;LAST_DAY()函数直接返回指定日期所在月的最后一天。

PostgreSQL

利用DATE_TRUNC截断日期到月份级别,配合区间计算:

  • 基础写法:
AND efdtmov BETWEEN DATE_TRUNC('month', CURRENT_DATE) - INTERVAL '1 month' 
                AND DATE_TRUNC('month', CURRENT_DATE) - INTERVAL '1 day'
  • 严谨写法:
AND efdtmov >= DATE_TRUNC('month', CURRENT_DATE) - INTERVAL '1 month' 
AND efdtmov < DATE_TRUNC('month', CURRENT_DATE)

说明:DATE_TRUNC('month', CURRENT_DATE)得到当月月初,减1个月是上月月初,减1天则是上月月末。

SQL Server

使用DATEADD和EOMONTH函数组合:

  • 基础写法:
AND efdtmov BETWEEN DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0) 
                AND EOMONTH(DATEADD(MONTH, -1, GETDATE()))
  • 严谨写法:
AND efdtmov >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0) 
AND efdtmov < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)

说明:DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) -1, 0)计算上月第一天;EOMONTH()直接返回指定日期所在月的最后一天。

Oracle

通过TRUNC和ADD_MONTHS函数实现:

  • 基础写法:
AND efdtmov BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -1) 
                AND LAST_DAY(ADD_MONTHS(SYSDATE, -1))
  • 严谨写法:
AND efdtmov >= ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -1) 
AND efdtmov < TRUNC(SYSDATE, 'MM')

说明:TRUNC(SYSDATE, 'MM')获取当月第一天,减1个月得到上月第一天;LAST_DAY()返回上月最后一天。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:12:52