【发布时间】:2017-01-18 22:45:01
【问题描述】:
问题:仅使用班次日期计算两个日期之间的时间量。班次日期是唯一允许的时间来计算时间。因此,在下面的数据示例中,我希望独立查看每个#Rejections 记录的时差。理想情况下,我还想考虑午休时间,但如果这让这更难处理,我不考虑。
数据:
CREATE TABLE #Shifts
(
ShiftId INT
,StartTime DECIMAL(6,2)
,EndTime DECIMAL(6,2)
,LunchStart DECIMAL(6,2)
,LunchEnd DECIMAL(6,2)
);
INSERT INTO #Shifts VALUES (1, 6.00, 16.75, 11.75, 12.50) /*6am to 4:45pm*/
INSERT INTO #Shifts VALUES (2, 17.00, 3.75, 23.00, 23.75) /*5pm to 3:45am (next day)*/
INSERT INTO #Shifts VALUES (3, 5.00, 17.75, 12.00, 12.75) /*5am to 5:45pm*/
CREATE TABLE #Rejections
(
JobId INT
,WeldId INT
,IndicationNum INT
,FirstRejectedDate DATETIME
,LastAcceptedDate DATETIME
);
INSERT INTO #Rejections VALUES (500, 700, 2, '2017-01-03 22:35:31.000', '2017-01-04 01:38:16.000')
INSERT INTO #Rejections VALUES (500, 701, 3, '2017-01-04 01:48:55.000', '2017-01-06 09:21:11.000')
我正在寻求有关如何解决此问题的帮助。我是 SQL Server 的新手,这个问题让我很困惑。我什至不知道从哪里开始。如果对可用命令有帮助,我正在使用 SQL Server 2008 R2。有人可以帮我弄清楚如何实现这一目标吗?
【问题讨论】:
-
您能解释一下并提供您想要的输出示例吗?
-
您实际上是否将开始/结束时间存储为小数?如果您将它们存储为
datetime,您至少可以对这些值执行datediff。之后,您可以通过datediff查看午餐时间,然后从总花费的时间中减去。您按照上面显示的方式进行操作会使这件事变得更加困难,尤其是当您的轮班超过一天时。 -
我使用的 ERP 系统存储了一个小数点。我不同意他们的决定。我想我必须先将其转换为日期时间。
标签: sql-server date sql-server-2008-r2