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

请求提供添加列的SQL代码及完善日期分类列的SQL查询语句

完善后的日期分类SQL查询

没问题,我来帮你把这个SQL查询补全并优化得更清晰好用~首先梳理下你的需求:你需要基于COL3的日期值,生成几个日期分类标识列(Today、Yesterday、TWO AND 5、FIVEPLUS),每个列用1/0标记当前行是否属于该分类。

优化后的完整查询代码

我先把重复的日期转换操作提取成变量,让代码更简洁易读,同时修正了原查询里的逻辑细节:

-- 定义当前日期变量,避免重复计算
DECLARE @Today DATE = CONVERT(DATE, GETDATE());

SELECT 
    COL1,
    a.COL2,
    CONVERT(DATE, COL3) AS COL3, -- 确保输出为纯日期类型
    COL4,
    -- 今天:日期与当前日期完全匹配
    IIF(CONVERT(DATE, COL3) = @Today, 1, 0) AS Today,
    -- 昨天:日期为当前日期的前一天
    IIF(CONVERT(DATE, COL3) = DATEADD(DAY, -1, @Today), 1, 0) AS Yesterday,
    -- 2-5天前:日期范围在当前日期减5天到减2天之间(包含两端)
    IIF(CONVERT(DATE, COL3) BETWEEN DATEADD(DAY, -5, @Today) AND DATEADD(DAY, -2, @Today), 1, 0) AS [TWO AND 5],
    -- 5天以上:日期早于当前日期减5天
    IIF(CONVERT(DATE, COL3) < DATEADD(DAY, -5, @Today), 1, 0) AS FIVEPLUS
FROM 
    YourTable a; -- 记得替换成你的实际表名

关键优化说明

  • 简化重复操作:用@Today变量存储当前日期,避免多次调用CONVERT(DATE, GETDATE()),既提升可读性也能小幅优化性能。
  • 精准条件判断:把原查询里的范围判断替换成更直接的日期匹配(比如Yesterday直接判断等于前一天),逻辑更清晰,也避免边界值错误。
  • 清晰的范围定义:用BETWEEN明确TWO AND 5的日期范围(2天前到5天前),语义更直观。

额外优化(如果COL3已是DATE类型)

如果你的COL3本身就是DATE类型(而非DATETIME),可以去掉所有CONVERT(DATE, COL3),让代码更高效:

DECLARE @Today DATE = GETDATE();

SELECT 
    COL1,
    a.COL2,
    COL3,
    COL4,
    IIF(COL3 = @Today, 1, 0) AS Today,
    IIF(COL3 = DATEADD(DAY, -1, @Today), 1, 0) AS Yesterday,
    IIF(COL3 BETWEEN DATEADD(DAY, -5, @Today) AND DATEADD(DAY, -2, @Today), 1, 0) AS [TWO AND 5],
    IIF(COL3 < DATEADD(DAY, -5, @Today), 1, 0) AS FIVEPLUS
FROM 
    YourTable a;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:31:45