SQL CASE表达式判断24小时内完成逻辑错误如何修正
错误原因
你原逻辑的判断条件要求「总小时数≤24 同时 分钟数≤0」,也就是说只有耗时刚好为整0分钟的24小时、或者更短的整小时0分钟的情况才会返回Y,像18:52、23:12这类有非0分钟的耗时都不满足条件,所以全部返回了N。
修正方案
判断逻辑改成计算总耗时的总分钟数,只要≤1440分钟(即24小时)就返回Y,否则返回N,两种适配Oracle(SQL Developer对应数据库)的写法可选:
写法1:在你原有逻辑基础上修改
SELECT CASE WHEN (extract(day FROM service_completed) * 24 * 60) + (extract(hour FROM service_completed) * 60) + extract(minute FROM service_completed) <= 1440 THEN 'Y' ELSE 'N' END AS Completed_within_24HRS FROM 你的表名;
写法2:更简洁的间隔比较写法
如果你的service_completed是INTERVAL类型的耗时,可直接和24小时间隔对比:
SELECT CASE WHEN service_completed <= INTERVAL '24' HOUR THEN 'Y' ELSE 'N' END AS Completed_within_24HRS FROM 你的表名;
修正后你给出的测试数据返回结果如下,完全符合预期:
| 耗时 | Completed_within_24HRS |
|---|---|
| 18:52 | Y |
| 17:37 | Y |
| 47:21 | N |
| 20:29 | Y |
| 45:31 | N |
| 23:12 | Y |
| 29:14 | N |
内容的提问来源于stack exchange,提问作者BHW
相关产品推荐
相关产品推荐

