如果发现很多关于如何为两个日期之间的时间表设置每小时时间段的帖子,但在我的例子中,这两个日期是日期时间,它们不是从 00 分钟开始。
这是一个例子。
Start date = 2023-04-20 06:30:00
End date = 2023-04-20 14:30:00
我想要一个看起来像这样的输出
Hour Start End
6 2023-04-20 06:30:00 2023-04-20 07:00:00 -- ** don't start at 6:00 **
7 2023-04-20 07:00:00 2023-04-20 08:00:00
...
13 2023-04-20 13:00:00 2023-04-20 14:00:00
14 2023-04-20 14:00:00 2023-04-20 14:30:00 -- ** don't end at 15:00 **
肮脏的解决方案,我知道。希望有人能写得更好
DECLARE @InStartDate SMALLDATETIME='2023-04-20 06:30:00';
DECLARE @InStopDate SMALLDATETIME='2023-04-20 14:30:00';
WITH INTERVAL AS
(
SELECT @InStartDate AS StartDate,DATEADD(MI,30,@InStartDate)AS EndDate
UNION ALL
SELECT I.EndDate,DATEADD(MI,60,I.EndDate)
FROM INTERVAL AS I
WHERE I.EndDate<DATEADD(MI,-30,@InStopDate)
)
SELECT I.StartDate,I.EndDate
FROM INTERVAL AS I
UNION ALL
--last interval 30 min
SELECT MAX(F.EndDate),DATEADD(MI,30,MAX(F.EndDate))
FROM INTERVAL AS F