如何在 SQL 服务器中生成两个小时之间的小时数?

How to generate hours between two hours in SQL Server?

我想生成一个以 30 分钟为间隔的小时列表。

例如,一名员工在 09:00 上班,在 18:00 下班,所以我想生成这个:

Hours
-----
09:00
09:30
10:00
10:30
11:00
11:30
12:00
12:30
13:00
13:30
14:00
14:30
15:00
15:30
16:00
16:30
17:00
17:30
18:00

我怎样才能生成这个?谢谢

那么使用递归CTE,你可以达到这个结果。

尝试以下查询 -

DECLARE @timeFrom TIME = '09:00'
DECLARE @timeTo TIME = '18:00'

;with SourceHrs
as
(
    select @timeFrom as [Hours]
    UNION ALL
    SELECT DATEADD(MINUTE, 30, [Hours]) from SourceHrs WHERE [Hours] < @timeTo
)
SELECT CONVERT(VARCHAR(5),Hours,108) FROM SourceHrs

结果

Hours
-------
09:00
09:30
10:00
10:30
11:00
11:30
12:00
12:30
13:00
13:30
14:00
14:30
15:00
15:30
16:00
16:30
17:00
17:30
18:00

这会给你所需要的,使用计数比递归更快:

DECLARE @from time = '09:00'
DECLARE @to time =  '09:00'

IF @from <= @to
WITH N(N)AS 
(SELECT 1 FROM(VALUES(1),(1),(1),(1),(1),(1),(1))M(N)),
tally(N)AS(SELECT ROW_NUMBER()OVER(ORDER BY N.N)FROM N,N a)
SELECT top (datediff(minute, @from, @to)/ 30 + 1 ) 
  LEFT(dateadd(minute, (N - 1 )*30, @from), 5)
FROM tally

你也可以试试 while 循环

DECLARE @strattime TIME = '09:00' DECLARE @endtime TIME = '18:00'

CREATE TABLE #tmp_hours( [BetweenHours] VARCHAR(5) )

WHILE @strattime <= @endtime BEGIN    INSERT INTO #tmp_hours values(@strattime)   SET @strattime = DATEADD(minute,30,@strattime) END

SELECT * FROM #tmp_hours DROP TABLE #tmp_hours