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

如何在SQL WHERE子句中实现工作日动态数据筛选逻辑?

解决方案

核心逻辑是根据当前日期的星期几分支设置WHERE条件:

  • 当天是周一,筛选RELATIVE_GLOBAL_DAY覆盖上周一至周五的范围
  • 当天是周二至周日,保持原条件RELATIVE_GLOBAL_DAY = -1

以下是主流数据库的实现代码:

MySQL

MySQL中WEEKDAY()返回值:周一为0,周日为6,用此函数实现逻辑:

WHERE 
    CASE WEEKDAY(CURDATE())
        WHEN 0 THEN tpd."RELATIVE_GLOBAL_DAY" BETWEEN -7 AND -3 -- 周一:上周一到周五对应-7至-3
        ELSE tpd."RELATIVE_GLOBAL_DAY" = -1 -- 周二至周日:取昨日数据
    END

PostgreSQL

PostgreSQL用extract(dow from current_date),返回值:周日为0,周一为1:

WHERE 
    CASE extract(dow from current_date)
        WHEN 1 THEN tpd."RELATIVE_GLOBAL_DAY" BETWEEN -7 AND -3 -- 周一:上周一到周五对应-7至-3
        ELSE tpd."RELATIVE_GLOBAL_DAY" = -1 -- 周二至周日:取昨日数据
    END

SQL Server

SQL Server中DATEPART(weekday, GETDATE())常规设置下:周日为1,周一为2:

WHERE 
    CASE DATEPART(weekday, GETDATE())
        WHEN 2 THEN tpd."RELATIVE_GLOBAL_DAY" BETWEEN -7 AND -3 -- 周一:上周一到周五对应-7至-3
        ELSE tpd."RELATIVE_GLOBAL_DAY" = -1 -- 周二至周日:取昨日数据
    END

说明

  • 范围BETWEEN -7 AND -3的验证:假设今天是周一(RELATIVE_GLOBAL_DAY=0),上周五是往前推3天(-3),上周一往前推7天(-7),刚好覆盖上周一至周五的所有工作日数据。
  • 若你的数据库星期函数返回规则不同,只需调整CASE语句中的判断值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:00:02