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

