可以使用BETWEEN
與您的進出時間,像這樣(注意下面的重新運行的):在查詢工作了
CREATE TABLE #shifts
(
shiftNo INT,
time_In TIME(0),
time_Out TIME(0)
);
INSERT INTO #shifts
(
shiftNo,
time_In,
time_Out
)
VALUES
(1, '06:00:00', '14:00:00'),
(2, '14:00:00', '22:00:00'),
(3, '22:00:00', '06:00:00');
-- the selected time
DECLARE @selectedTime TIME(0) = CONVERT(TIME(0), DATEADD(HOUR, 12, GETDATE()), 108);
-- modify the selected time if it falls in the shift that crosses midnight
SET @selectedTime = CASE WHEN @selectedTime > '22:00:00' OR @selectedTime < '06:00:00'
THEN '22:01:00' -- modified value
ELSE @selectedTime -- regular value
END;
-- show the time we are working with
SELECT @selectedTime;
-- filter your shifts
SELECT *
FROM #shifts AS s
WHERE @selectedTime
BETWEEN s.time_In AND CASE WHEN s.time_Out = '06:00:00' -- is the out time 6.00
THEN '23:59:59' -- change it to before midnight if so
ELSE s.time_Out -- keep the time as it is
END;
DROP TABLE #shifts;
的CASE
語句,如果你是@selectedTime
工作時間是將s.time_Out
之前跨越午夜時間它們都被調整,這允許選擇最後一班。
有可能是一個更簡單的解決方案,但這與您提供的數據一起工作。
我可以嘗試這件事情,這將是好的!謝謝:) – GGw
這可能會工作,但取決於高度緊密,你的源數據必然會出現這些變化,看起來像是你可以解決的問題的解決方法。我稍後再試 – Tanner