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

Oracle SQL需求:平日查昨日数据,周一查周五至周日数据

Oracle SQL 实现平日/周一差异化数据查询

直接在WHERE子句里用逻辑分支+日期函数就能实现需求,不用CASE语句,完整SQL如下:

SELECT *
FROM My_Data
WHERE
  -- 非周一:仅取昨日数据
  (TRUNC(SYSDATE) != TRUNC(SYSDATE, 'IW') 
   AND TRUNC(TO_DATE(My_Data.Date, 'YYYY-MM-DD')) = TRUNC(SYSDATE) - 1)
  OR
  -- 周一:取周五至周日的数据(即当前日期往前推3天到1天)
  (TRUNC(SYSDATE) = TRUNC(SYSDATE, 'IW') 
   AND TRUNC(TO_DATE(My_Data.Date, 'YYYY-MM-DD')) BETWEEN TRUNC(SYSDATE) - 3 AND TRUNC(SYSDATE) - 1)

关键细节说明:

  • 可靠判断周一:用TRUNC(SYSDATE, 'IW')获取ISO周的周一(ISO标准以周一为每周第一天,不受数据库地区语言设置影响,避免了TO_CHAR(SYSDATE, 'DY')因语言差异导致的判断错误),和TRUNC(SYSDATE)对比即可确定当天是否为周一。
  • 日期维度匹配:用TRUNC()截断日期的时分秒部分,确保仅按日期维度匹配,避免因时间戳差异漏取数据。
  • 字段类型优化:如果My_Data.Date本身是DATE类型,直接用TRUNC(My_Data.Date)即可,无需TO_DATE转换,能提升查询效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:35:20