如何在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
相关产品推荐
相关产品推荐

