在2008 R2中创建日期时间序列

时间:2013-04-16 02:39:02

标签: sql sql-server-2008-r2

我需要在临时表中创建一个具有微小可变时间增量的日期时间序列。输出应该类似于使用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

可以这样做吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

我建议使用一个序列表 - 每个数据库应该有一个,因为它们非常有用,可以快速,轻松地生成日期时间序列。

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(或表值函数),因为它的速度大致相同且更灵活。