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

SQL日期范围IF语句编写求助:按日期判断取当月或上月数据

调整后的SQL语句

SELECT *
FROM table1 e
LEFT JOIN table2 d
    ON e.ENTITY_NBR = d.entity_nbr
    AND (
        CASE
            -- 当日为5号之后取当月,否则取上月
            WHEN DAY(GETDATE()) > 5 THEN DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1)
            ELSE DATEADD(MONTH, -1, DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1))
        END
    ) BETWEEN d.MONTH_BEGIN_DATE AND d.MONTH_END_DATE

逻辑说明

  • 核心通过CASE判断当前日期的号数区间,计算出需要查询的目标月份的锚点日期(目标月1日)
  • 用锚点日期匹配你表中存储的月份起止区间MONTH_BEGIN_DATE、MONTH_END_DATE,即可自动匹配到符合要求的月份数据

不同数据库适配调整

如果你的数据库不是SQL Server,可以对应修改日期函数:

  • MySQL环境:
    • 替换GETDATE()为NOW()
    • 替换DATEFROMPARTS(YEAR(NOW()), MONTH(NOW()), 1)为STR_TO_DATE(CONCAT(YEAR(NOW()),'-',MONTH(NOW()),'-01'), '%Y-%m-%d')
  • Oracle环境:
    • 替换GETDATE()为SYSDATE
    • 替换当月1日写法为TRUNC(SYSDATE, 'MM')
    • 替换上月1日写法为ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -1)

注:上述SQL默认table1别名为e、table2别名为d,如果你的实际表别名规则不同可自行调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:15:04