答案 0 :(得分:0)
我认为这个递归cte完全符合您的要求:
with cte
as
(select 2400 as HH, 0 as MM
UNION ALL
select (HH + 25) as HH, MM + 15 as MM from cte where MM < 1500)
select CASE WHEN (HH/100) % 25 = 24 THEN 24
ELSE (HH/100) % 25 + 1
END as HH, MM from cte where MM <= 1425;
无需创建任何表格或任何内容。
答案 1 :(得分:0)
我会按照你的要求在黑暗中拍摄。我假设你真的希望小时在午夜为0,因为24:00不是有效时间。
我正在为此解决方案使用计数表。它们对如此多的东西非常有用,我会像这样对我的系统进行观察。
创建视图[dbo]。[cteTally]为
WITH
E1(N) AS (select 1 from (values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)),
E2(N) AS (SELECT 1 FROM E1 a, E1 b), --10E+2 or 100 rows
E4(N) AS (SELECT 1 FROM E2 a, E2 b), --10E+4 or 10,000 rows max
cteTally(N) AS
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E4
)
select N from cteTally
GO
这允许我在需要时重复使用它。我们非常有效地利用这个计数表来处理这类事情。
SELECT MyHour = H.N - 1
, MyMinutes = ((H.N - 1) * 60) + (M.N - 1) * 15
FROM dbo.cteTally H
CROSS JOIN dbo.cteTally M
where H.N <= 24
AND M.N <= 4