我有一個 Bookings 表,我需要計算一個作業人員在一周內作業的總小時數,但我需要它來切斷星期一午夜和下一個星期一午夜之間的日期。
create table Bookings (ID int IDENTITY(1,1) not null, start datetime, finish datetime, staffId int)
insert into Bookings (start, finish, staffId) values ('2022-06-19 21:00:00', '2022-06-20 07:00:00', 1)
insert into Bookings (start, finish, staffId) values ('2022-06-24 21:00:00', '2022-06-25 07:00:00', 1)
insert into Bookings (start, finish, staffId) values ('2022-06-25 21:00:00', '2022-06-26 07:00:00', 1)
insert into Bookings (start, finish, staffId) values ('2022-06-26 21:00:00', '2022-06-27 07:00:00', 1)
select *, datediff(MINUTE, start, finish)/60.0
from Bookings
where staffid = 1 and start between '2022-06-19' and '2022-06-27'

我需要第 1 行從 2022-06-20 00:00 開始,第 4 行在 2022-06-27 00:00 結束,所以第 1 行的小時數為 7,第 4 行的小時數為 3,因此總計 30小時而不是 40 小時。
關于如何做到這一點的任何想法?
uj5u.com熱心網友回復:
我懷疑你需要在這里做的是首先改變你WHERE看你開始值之后finish的時間,以及你完成值之前的時間。然后對于作業時間,您需要使用運算式來回傳列或輸入引數值,具體取決于哪個更小/更大:startCASE
DECLARE @Start date = '20220620',
@Finish date = '20220627';
SELECT ID,
staffId,
finish,
staffId,
DATEDIFF(MINUTE,CASE WHEN start < @Start THEN @Start ELSE start END,CASE WHEN finish > @Finish THEN @Finish ELSE finish END) / 60. AS Hours
FROM dbo.Bookings
WHERE staffId = 1
AND finish > @Start
AND start < @Finish;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/493658.html
