【发布时间】:2016-06-03 15:49:17
【问题描述】:
我需要为 3 种不同类型的班次定义班次长度:8 小时、10 小时或 12 小时班次。
8 小时轮班:
第一班:早上 6 点到下午 2 点
第二班:2pm-10pm
第三班:晚上 10 点至早上 6 点
10 小时轮班:
第一班:早上 5 点到下午 3 点
第二班:下午 3 点到凌晨 1 点
12 小时轮班:
第一班:凌晨 3 点至下午 3 点
第二班:下午 3 点到凌晨 3 点
问题是我不确定处理午夜转换的最佳方法是什么。当您执行Datediff("n", #10:00:00:pm#, #06:00:00#) 时,它会给出一个负值,因为它认为您想要从早上 6 点到晚上 10 点的时间差(但为负值)。这不是我想要的。
我下面的代码在午夜线变化的时间一直给我负值。
这里极其棘手的部分是用户可以提交start_time,比如说,凌晨 2:30:00,这是过去午夜线。这使事情进一步复杂化。
我怎样才能使我的代码不仅返回正确的班次长度,而且还考虑到用户在午夜之后提交开始时间的可能性?
(Switch
(Max([dbo_job.Uf_Shift_Standard])="8",
(Switch(
(tbl_OEE.shift = "SH1"),
Datediff("n", Max([start_time]), [end_time]),
(tbl_OEE.shift = "SH2"),
Datediff("n", Max([start_time]), [end_time]),
True,
Datediff("n", Max([start_time]), #23:59:59#) + Datediff("n", #00:00:00#, #06:00:00#))),
Max([dbo_job.Uf_Shift_Standard])="10",
(Switch(
(tbl_OEE.shift = "SH1"),
Datediff("n", Max([start_time]), [end_time]),
True,
Datediff("n", Max([start_time]), #23:59:59#) + Datediff("n", #00:00:00#, #01:00:00#))),
Max([dbo_job.Uf_Shift_Standard])="12",
(Switch(
(tbl_OEE.shift = "SH1"),
Datediff("n", Max([start_time]), #15:00:00#),
True,
Datediff("n", Max([start_time]), #23:59:59#) + Datediff("n", #00:00:00#, #03:00:00#)))
)
) AS actual_shift_length_minutes
【问题讨论】: