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

SQL Server日期处理:新月份日期按当月首周计算的实现

解决SQL Server中日期转换为当月所属周第一天的问题

核心逻辑

你的需求是将日期转换为当月范围内的周第一天(而非跨月的自然周第一天),核心思路是:

  • 先按原有规则计算自然周第一天
  • 若该日期与原日期同属一个月,直接使用
  • 若跨月,则取当月的第一个周第一天

实现代码

假设你的周第一天定义为周日(与原有DATEPART(WEEKDAY)默认逻辑一致,周日返回1),可以用以下CASE语句实现:

-- 示例:替换@date为你的日期列或具体日期
DECLARE @date DATE = '2023-09-01';
SELECT 
    CASE 
        -- 计算原规则的周第一天,判断是否与原日期同月
        WHEN MONTH(DATEADD(day, 1 - DATEPART(WEEKDAY, @date), @date)) = MONTH(@date)
            THEN DATEADD(day, 1 - DATEPART(WEEKDAY, @date), @date)
        -- 若跨月,计算当月第一个周第一天(周日)
        ELSE DATEADD(
            day, 
            (8 - DATEPART(WEEKDAY, DATEFROMPARTS(YEAR(@date), MONTH(@date), 1))) % 7, 
            DATEFROMPARTS(YEAR(@date), MONTH(@date), 1)
        )
    END AS MonthWeekStart;

测试验证

  • 输入2023-08-25,返回2023-08-20(同属8月,符合原有逻辑)
  • 输入2023-09-01,返回2023-09-03(跨月自然周,取9月第一个周日)
  • 输入2023-09-02,返回2023-09-03(同样跨月,取当月首周第一天)

注意事项

如果你的周第一天定义不是周日(比如周一为第一天),需要调整DATEPART(WEEKDAY)的计算逻辑,或提前设置SET DATEFIRST 1(将周一设为周第一天)后再执行上述代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:31:18