两个日期时间之间的时间段

问题描述 投票:0回答:1

如果发现很多关于如何为两个日期之间的时间表设置每小时时间段的帖子,但在我的例子中,这两个日期是日期时间,它们不是从 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 **
sql sql-server datetime scheduling
1个回答
0
投票

肮脏的解决方案,我知道。希望有人能写得更好

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
© www.soinside.com 2019 - 2024. All rights reserved.