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

如何在T-SQL中计算24小时三班倒?夜班返回NULL问题求助

T-SQL三班倒班次计算优化方案

你的夜班判断条件存在逻辑矛盾:DATEPART(hh, ct.InPACU) >= 23 AND DATEPART(hh, ct.InPACU) < 07 永远无法成立——一个小时数不可能同时大于等于23且小于7,这就是夜班时段返回NULL的原因。

优化后的代码方案

直接将夜班条件拆分为两个互斥的分支,用OR连接:

CASE 
    WHEN DATEPART(hh, ct.InPACU) >= 7 AND DATEPART(hh, ct.InPACU) < 12 THEN 'Morning'
    WHEN DATEPART(hh, ct.InPACU) >= 12 AND DATEPART(hh, ct.InPACU) < 23 THEN 'Evening'
    WHEN DATEPART(hh, ct.InPACU) >= 23 OR DATEPART(hh, ct.InPACU) < 7 THEN 'Night'
END AS Shift_Type

更简洁的替代写法

如果想简化条件判断,可以利用ELSE分支兜底(早班和晚班已覆盖7-23点的所有小时):

CASE 
    WHEN DATEPART(hh, ct.InPACU) BETWEEN 7 AND 11 THEN 'Morning'
    WHEN DATEPART(hh, ct.InPACU) BETWEEN 12 AND 22 THEN 'Evening'
    ELSE 'Night'
END AS Shift_Type

这里用BETWEEN替代连续的>=和<,逻辑更清晰;同时用ELSE直接匹配所有不符合早、晚班的时段(即23点到次日6点),避免重复判断。

注意事项

如果InPACU字段包含完整的日期时间(跨天场景),上述逻辑依然有效——因为我们只提取小时部分进行判断,不受日期影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:49:57