我提出了以下挑战:
我需要从系统值中选择10到70分钟,如下例所示。
小时
10:00
10:01
10:02
..
..
..
69:59
可能吗?
这是一种方法,使用递归CTE生成小时和分钟所需的序列:
DECLARE @start_hour int = 10;
DECLARE @end_hour int = 69;
DECLARE @start_minute int = 0;
DECLARE @end_minute int = 59;
WITH hours AS (
SELECT @start_hour hour
UNION ALL
SELECT hour + 1 FROM hours WHERE hour < @end_hour
),
minutes AS (
SELECT @start_minute minute
UNION ALL
SELECT minute + 1 FROM minutes WHERE minute < @end_minute
)
SELECT
CAST(hour AS VARCHAR(2)) + ':' + RIGHT('00' + CAST(minute AS VARCHAR(2)), 2)
FROM hours
CROSS JOIN minutes
ORDER BY
hour,
minute;
上面的两个序列代表小时和分钟的可能值。我们使用交叉连接来生成所有组合。请注意,对于minute
可能采用介于0和9之间的值的情况,需要将分钟填充为零。