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

SQL中如何按条件同时修改Datetime的日期与时间?

解决Datetime字段按规则调整的问题

我来帮你搞定第三个条件的实现!你之前的代码是两个独立的CASE语句,这会导致语法问题,正确的做法是把三个条件整合到同一个CASE WHEN分支结构里,这样就能同时处理日期和时间的修改了。

完整实现代码

CASE
    -- 条件1:时间早于9:00,设为当天9:00
    WHEN CAST(MyDate AS TIME) < '09:00:00' 
        THEN DATEADD(Hour, 9, CAST(CAST(MyDate AS Date) AS Datetime))
    -- 条件2:时间在9:00到15:00之间,设为当天16:00
    WHEN CAST(MyDate AS TIME) BETWEEN '09:00:00' AND '15:00:00'
        THEN DATEADD(Hour, 16, CAST(CAST(MyDate AS Date) AS Datetime))
    -- 条件3:时间晚于15:00,设为次日9:00(日期+1天,时间设为9:00)
    WHEN CAST(MyDate AS TIME) > '15:00:00'
        THEN DATEADD(Hour, 9, DATEADD(Day, 1, CAST(CAST(MyDate AS Date) AS Datetime)))
    -- 兜底:如果有特殊情况(比如时间为NULL),可保留原日期或自定义处理
    ELSE MyDate
END AS AdjustedMyDate

关键说明

  1. 条件3的实现逻辑:先把MyDate转成Date类型提取纯日期,用DATEADD(Day, 1, ...)给日期加1天,再转成Datetime后通过DATEADD(Hour,9,...)设置时间为9:00,这样就同时完成了日期加1和时间调整的操作。
  2. 统一CASE结构:所有条件都放在同一个CASE里,既避免语法错误,也让逻辑更清晰易懂。
  3. 字段名修正:你之前代码里写的PayoutDtApplication应该是笔误吧?我统一换成了问题里的MyDate,如果实际业务中是其他字段,替换回去即可。
  4. 简化范围判断:用BETWEEN简化了条件2的范围判断,等价于>= '09:00:00' AND <= '15:00:00',代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:34:35