我有以下两个约会示例

第二次预约从晚上7点持续到午夜。然而,持续时间返回为19小时。这是因为没有存储日期,它计算了前一天晚上7点和午夜之间的差异。
约会只能安排到午夜,所以有没有一些SQL会在选择下一个晚上的午夜而不是前一天的午夜时将一天的时间增加1天?这应该只在午夜时间时有效,否则它可以正常工作。
当前SQL
select mr.AssignmentId, ABS(DATEDIFF(MINUTE, mr.AssignmentStart, mr.AssignmentEnd) /60.0) as Total
from master_rota mr

发布于 2017-01-24 22:39:55
好吧,不要使用abs()
select mr.AssignmentId,
(case when mr.AssignmentStart < AssignmentEnd
then DATEDIFF(MINUTE, mr.AssignmentStart, mr.AssignmentEnd) / 60.0
else 24 + DATEDIFF(MINUTE, mr.AssignmentStart, mr.AssignmentEnd) / 60.0
end) as Total
from master_rota mr;实际上,我认为我更喜欢这个等价的版本:
select mr.AssignmentId,
(DATEDIFF(MINUTE, mr.AssignmentStart, mr.AssignmentEnd) / 60.0 +
(case when mr.AssignmentStart < AssignmentEnd then 0 else 24 end)
) as Total
from master_rota mr;它只在一个地方有datediff()。
发布于 2017-01-24 22:40:28
您应该让您的应用程序执行插入操作,以实际执行正确的插入逻辑。但是,这似乎是一种解决方法:
SELECT mr.AssignmentId
, DATEDIFF(MINUTE, mr.AssignmentStart,
CASE WHEN mr.AssignmentEnd < mr.AssignmentStart THEN mr.AssignmentEnd + 1 ELSE mr.AssignmentEnd END) /60.0 as Total
FROM master_rota mr发布于 2017-01-24 22:47:40
如果是午夜,改成第二天00:00:00
select ABS(DATEDIFF(MINUTE, mr.AssignmentStart, iif(mr.AssignmentEnd='1900-01-01 00:00:00', '1900-01-02 00:00:00', mr.AssignmentEnd )) /60.0) as Total
from #temp mrhttps://stackoverflow.com/questions/41830871
复制相似问题