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

SQL Server中按指定条件从s_term、w_due提取对应短日期的实现方法

SQL Server 实现日期提取方案

核心思路

  1. 固定每周起始日为周一,避免系统默认配置干扰计算结果
  2. 先算出目标年份8月第一个周一的基准日期
  3. 按照业务规则计算偏移周数,得到目标日期后转换为dd-mm-yyyy格式即可

完整实现代码

-- 设置周起始为周一(参数1对应周一,避免系统默认周起始规则影响)
SET DATEFIRST 1;

-- 定义目标年份,默认取当前年份,可按需修改为固定值
DECLARE @TargetYear INT = YEAR(GETDATE());
-- 计算当年8月1日的日期
DECLARE @AugFirst DATE = DATEFROMPARTS(@TargetYear, 8, 1);
-- 计算8月第一个周一的基准日期
DECLARE @FirstMonOfAug DATE = DATEADD(DAY, (1 - DATEPART(WEEKDAY, @AugFirst) + 7) % 7, @AugFirst);

-- 关联业务表计算目标日期
SELECT 
    s_term,
    w_due,
    -- 转换为dd-mm-yyyy格式
    FORMAT(
        DATEADD(WEEK, 
            CASE 
                WHEN s_term = 2 AND w_due = 2 THEN (2-1) + w_due -- 第2个周一偏移1周,加步长2周,总偏移3周
                WHEN s_term = 4 AND w_due = 2 THEN (4-1) + w_due -- 第4个周一偏移3周,加步长2周,总偏移5周
                ELSE 0 -- 其他业务规则可在此处扩展
            END, 
            @FirstMonOfAug
        ),
        'dd-MM-yyyy'
    ) AS target_date
FROM 你的业务表名;

注:如果使用SQL Server 2012以下版本,把FORMAT函数替换为CONVERT(VARCHAR(10), 目标日期, 105)即可得到相同格式的结果。


结果验证

以2024年为例,执行后返回结果如下:

  • s_term=2、w_due=2时,返回26-08-2024(对应8月第4个周一)
  • s_term=4、w_due=2时,返回09-09-2024(对应9月第2个周一)

如果需要适配其他年份,仅需修改@TargetYear变量的赋值即可,无需调整其他逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:51:01