我需要在临时表中创建一个带有分钟可变时间增量的日期时间序列。输出应该类似于使用 5 时的样子
2012-12-13 04:20:00.000
2012-12-13 04:25:00.000
2012-12-13 04:30:00.000
2012-12-13 04:35:00.000
2012-12-13 04:40:00.000
2012-12-13 04:50:00.000
这可以做到吗?
我需要在临时表中创建一个带有分钟可变时间增量的日期时间序列。输出应该类似于使用 5 时的样子
2012-12-13 04:20:00.000
2012-12-13 04:25:00.000
2012-12-13 04:30:00.000
2012-12-13 04:35:00.000
2012-12-13 04:40:00.000
2012-12-13 04:50:00.000
这可以做到吗?
WITH DateTimeSequence
AS
(
SELECT CONVERT(datetime, '2012-12-13 04:20:00', 120) AS [datetime] -- Start Date
UNION ALL
SELECT DATEADD(mi, 5, [datetime])
FROM DateTimeSequence
WHERE DATEADD(mi, 5, [datetime]) <= CONVERT(datetime, '2012-12-13 04:50:00', 120) -- End Date
)
SELECT [datetime]
FROM DateTimeSequence
我建议使用序列表——每个数据库都应该有一个,因为它们非常有用,可以快速轻松地生成日期时间序列。
CREATE TABLE Sequence
(Number int PRIMARY KEY)
现在用从 0 到 1,000,000 的整数填充这个表——别担心,你只需要这样做一次。
然后,您可以根据需要生成日期时间序列(最多 1,000,001),其变体为
SELECT DATEADD(minute, Number * @stepsize, @StartDateTime)
FROM Sequence
WHERE Number<@NumberRequired
看到这个SQL Fiddle
这通常比使用 CTE 更快,并且几乎与直接从表中检索信息一样快。事实上,您可能会考虑不使用临时表,而是使用它构建一个 SP(或表值函数),因为它的速度大致相同并且更加灵活。