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

如何用SQL的getdate()获取上周六至当前周五的动态日期?

解决SQL动态获取上周六到当前周五日期的问题

原代码问题分析

你提供的代码存在两处核心问题:

  1. 语法错误:cast函数缺少括号,Friday字段也未正确闭合语法;
  2. 逻辑错误:
    • 计算周六的语句dateadd(y,datediff(y,0,getdate()),-1)是取当前年份1月1日的前一天(即上一年12月31日),属于静态日期,并非动态的上周六;
    • 计算周五的语句是取当前周周一减3天,结果是上周六,完全不符合需求。

正确实现代码

以下是SQL Server环境下的正确写法,可动态获取包含当前日期的周六-周五周期的起始(上周六)和结束(当前周五):

-- 统一设置周日为一周第一天,避免DATEPART返回值差异
SET DATEFIRST 7;

SELECT
    -- 计算上周六:当前周期周五减6天
    DATEADD(DAY, -6, 
        CASE DATEPART(WEEKDAY, GETDATE())
            WHEN 7 THEN DATEADD(DAY, -1, GETDATE()) -- 若今天是周六,取昨天的周五
            ELSE DATEADD(DAY, (6 - DATEPART(WEEKDAY, GETDATE())) % 7, GETDATE())
        END
    ) AS [上周六],
    -- 计算当前周五
    CASE DATEPART(WEEKDAY, GETDATE())
        WHEN 7 THEN DATEADD(DAY, -1, GETDATE()) -- 若今天是周六,当前周五为昨天
        ELSE DATEADD(DAY, (6 - DATEPART(WEEKDAY, GETDATE())) % 7, GETDATE())
    END AS [当前周五];

逻辑说明

  • SET DATEFIRST 7:强制设置周日为一周的第一天,确保DATEPART(WEEKDAY)返回值固定:周日=1,周一=2...周五=6,周六=7;
  • 计算当前周五:如果今天是周六(返回值7),则当前周五为昨天;否则计算距离下一个周五的天数,得到当前周期的周五;
  • 上周六直接由当前周五减6天得到,确保周期始终是连续7天的周六到周五。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:10:22