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

如何用SQL根据NoOfDays字段生成对应10天区间的DateRange列

基于NoOfDays生成区间式DateRange的SQL实现

需求说明:

  • 根据NoOfDays字段生成对应的日期范围区间DateRange,规则为每10天一个区间:
    • NoOfDays = 70 → DateRange = 61-70
    • NoOfDays = 51 → DateRange = 51-60
    • NoOfDays = 100 → DateRange = 91-100
    • NoOfDays = 174 → DateRange = 171-180

当前代码问题:
原代码中@V_START和@V_END是固定值,无法根据NoOfDays动态生成区间,需要替换为基于NoOfDays的计算逻辑。

修改后的SQL代码:

SELECT 
    GETDATE() AS CurrentDate,
    TASK_ASSIGNED_DTM,
    DATEDIFF(DAY, TASK_ASSIGNED_DTM, GETDATE()) AS NoOfDays,
    -- 动态计算区间起始和结束值
    CAST( ((DATEDIFF(DAY, TASK_ASSIGNED_DTM, GETDATE()) - 1) / 10) * 10 + 1 AS VARCHAR(10)) 
    + '-' + 
    CAST( ((DATEDIFF(DAY, TASK_ASSIGNED_DTM, GETDATE()) - 1) / 10) * 10 + 10 AS VARCHAR(10)) AS DateRange
FROM [Table]

逻辑解释:

  1. 计算区间起始值:((NoOfDays - 1) / 10) * 10 + 1
    • 用NoOfDays - 1后做整数除法(SQL中整数除法会截断小数),得到区间的十位基数,再乘以10加1得到区间起始。
    • 例:NoOfDays=70 → (70-1)/10=6 → 6*10+1=61
  2. 计算区间结束值:((NoOfDays - 1) / 10) * 10 + 10
    • 基于同样的基数,加10得到区间结束。
    • 例:NoOfDays=70 → 6*10+10=70

如果想简化代码,避免重复计算NoOfDays,可以用CTE提取中间结果:

WITH TaskDays AS (
    SELECT 
        GETDATE() AS CurrentDate,
        TASK_ASSIGNED_DTM,
        DATEDIFF(DAY, TASK_ASSIGNED_DTM, GETDATE()) AS NoOfDays
    FROM [Table]
)
SELECT 
    CurrentDate,
    TASK_ASSIGNED_DTM,
    NoOfDays,
    CAST( ((NoOfDays - 1) / 10) * 10 + 1 AS VARCHAR(10)) + '-' + CAST( ((NoOfDays - 1) / 10) * 10 + 10 AS VARCHAR(10)) AS DateRange
FROM TaskDays

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:15:45