我假设您的时间范围数据类型是time,并且所有StartDTS和EndDTS值都在同一天内。这个查询可以完成这项工作,但如果日期值可以分为不同的日期,则需要CTE来获得相同的结果。
DECLARE @TimeFrameStart TIME = '10:00:00';
DECLARE @TimeFrameEnd TIME = '15:30:00';
SELECT [Indentifier],
CONVERT(TIME, [StartDTS]) AS [StartDTS],
CONVERT(TIME, [EndDTS]) AS [EndDTS],
CASE
WHEN CONVERT(TIME, [StartDTS]) >= @TimeFrameStart AND CONVERT(TIME, [EndDTS]) <= @TimeFrameEnd
THEN DATEDIFF(MINUTE, [StartDTS], [EndDTS])
WHEN CONVERT(TIME, [StartDTS]) <= @TimeFrameStart AND CONVERT(TIME, [EndDTS]) >= @TimeFrameEnd
THEN DATEDIFF(MINUTE, @TimeFrameStart, @TimeFrameEnd)
WHEN CONVERT(TIME, [StartDTS]) <= @TimeFrameStart AND CONVERT(TIME, [EndDTS]) > @TimeFrameStart
THEN DATEDIFF(MINUTE, @TimeFrameStart, CONVERT(TIME, [EndDTS]))
WHEN CONVERT(TIME, [EndDTS]) >= @TimeFrameEnd AND CONVERT(TIME, [StartDTS]) < @TimeFrameEnd
THEN DATEDIFF(MINUTE, CONVERT(TIME, [StartDTS]), @TimeFrameEnd)
ELSE 0
END AS [UtilizedMinutes]
FROM #RowDTS;