【发布时间】:2020-03-05 18:36:55
【问题描述】:
我的任务是计算从首次输入订单到发货所需的工作小时数。为此,由于权限问题,我无法创建任何类型的函数。
营业时间为周一至周五 08:00 - 17:30。周六和周日 - 08:00 - 16:00。它需要合计在这些核心小时内花费的时间。
如果订单是在当天开始(上午 8 点)之前下达的,则需要将订单视为上午 8 点的输入。如果订单是在一天结束之后(5.30pm M-F,4pm S/SS),则视为订单是在一天结束时输入的。 交货也是如此。
我对此进行了搜索,并在 SO 上找到了以前的答案,但发现所有以前接受的答案都使用函数来执行此操作。
在我的这个开发中,我已经在不使用函数的情况下实现了这一点。我在下面分享我的答案以供将来搜索/参考。
欢迎任何关于如何改进的反馈。
以下是一些示例订单和交货日期。
IF OBJECT_ID('tempdb..#Orders') IS NOT NULL DROP TABLE #Orders; -- Example data to prove the theory.
CREATE TABLE #Orders (OrderDate DateTime, DeliveryDate DATETIME)
INSERT INTO #Orders (#Orders.OrderDate, #Orders.DeliveryDate)
VALUES
(cast('2020-01-18 13:55:15.000' as datetime), cast('2020-01-19 13:35:56.110' as datetime)),
(cast('2020-01-18 23:47:57.000' as datetime), cast('2020-01-19 13:36:40.537' as datetime)),
(cast('2020-01-18 07:20:12.000' as datetime), cast('2020-01-19 13:37:41.977' as datetime)),
(cast('2020-01-18 08:51:46.813' as datetime), cast('2020-01-19 13:38:35.193' as datetime)),
(cast('2020-01-18 12:37:13.000' as datetime), cast('2020-01-19 14:24:35.927' as datetime)),
(cast('2020-01-18 12:59:54.000' as datetime), cast('2020-01-19 14:53:23.663' as datetime)),
(cast('2020-01-19 13:44:31.000' as datetime), cast('2020-01-19 14:56:47.157' as datetime)),
(cast('2020-01-19 13:38:19.000' as datetime), cast('2020-01-19 14:58:09.543' as datetime)),
(cast('2020-01-19 08:55:31.050' as datetime), cast('2020-01-20 08:17:25.073' as datetime)),
(cast('2020-01-18 21:16:23.000' as datetime), cast('2020-01-20 08:17:52.330' as datetime)),
(cast('2020-01-19 08:59:26.650' as datetime), cast('2020-01-20 08:18:05.163' as datetime)),
(cast('2020-01-19 08:49:24.193' as datetime), cast('2020-01-20 08:18:49.077' as datetime)),
(cast('2020-01-18 15:33:48.000' as datetime), cast('2020-01-20 08:26:24.387' as datetime)),
(cast('2020-01-18 18:45:52.000' as datetime), cast('2020-01-20 08:26:29.657' as datetime)),
(cast('2020-01-18 20:56:33.000' as datetime), cast('2020-01-20 08:27:25.517' as datetime)),
(cast('2020-01-18 08:55:53.100' as datetime), cast('2020-01-20 08:28:25.210' as datetime)),
(cast('2020-01-06 00:19:08.000' as datetime), cast('2020-01-20 08:28:27.197' as datetime)),
(cast('2020-01-18 17:38:50.000' as datetime), cast('2020-01-20 08:42:16.777' as datetime)),
(cast('2020-01-19 14:24:30.000' as datetime), cast('2020-01-20 08:42:37.537' as datetime)),
(cast('2020-01-19 12:00:01.000' as datetime), cast('2020-01-20 08:42:53.173' as datetime)),
(cast('2020-01-19 13:21:15.000' as datetime), cast('2020-01-20 08:43:18.517' as datetime)),
(cast('2020-01-19 04:11:15.000' as datetime), cast('2020-01-20 09:28:34.997' as datetime)),
(cast('2020-01-19 09:28:05.000' as datetime), cast('2020-01-20 09:28:51.447' as datetime)),
(cast('2020-01-16 22:09:49.000' as datetime), cast('2020-01-20 09:29:23.630' as datetime)),
(cast('2020-01-19 13:43:05.000' as datetime), cast('2020-01-20 09:29:41.997' as datetime))
【问题讨论】: