CTE在几分钟内递归

时间:2018-02-15 14:36:50

标签: sql sql-server common-table-expression

我试图制作CTE递归代码,告诉我日期和时间,但按分钟更改。

DECLARE @MinDate date = '02/10/18'
       ,@EndDate date = DATEADD(MINUTE, n, '00:00:00')

WITH MinuteData As
(
    SELECT @MinDate AS TimeStamp
    UNION ALL
    SELECT DATEADD(MINUTE, 1, TimeStamp)
    From MinuteData
    Where TimeStamp < @EndDate
)

2 个答案:

答案 0 :(得分:1)

您没有说明您的RDBMS。此代码适用于SQL-Server,您可能需要针对其他产品进行调整(下次:始终使用实际版本作为问号标记您的RDBMS!)

如果我正确地得到了这个,你只想得到一个BeanNameAware值列表,每个值在给定的开始和给定的结束之间增加一分钟。

尝试这样的事情

DATETIME

cte&#34; Tally&#34;将动态创建一个数字表。您也可以使用物理数字表 - 非常适合许多问题!

DECLARE @StartDate DATETIME={d'2018-10-02'}; DECLARE @EndDate DATETIME={ts'2018-10-02 12:30:00'}; WITH Tally AS ( SELECT TOP(60*24) ROW_NUMBER() OVER(ORDER BY (SELECT NULL))-1 AS Nmbr FROM master..spt_values) SELECT DATEADD(MINUTE,Nmbr,@StartDate) AS YourChangingDateTime FROM Tally WHERE DATEADD(MINUTE,Nmbr,@StartDate)<=@EndDate; 是1天的分钟数,如果需要更多,可以更改此内容。

TOP (60*24)只是一个预先填充的表,其中包含很多值。这是模拟包含多行的列表的最简单方法。

答案 1 :(得分:0)

如何使用datetime s?

DECLARE @MinDateTime datetime = '2018-02-10',
        @EndDateTime datetime = DATEADD(MINUTE, n, @MinDateTime);

WITH MinuteData As (
      SELECT @MinDateTime AS TimeStamp
      UNION ALL
      SELECT DATEADD(MINUTE, 1, TimeStamp)
      From MinuteData
      Where TimeStamp < @EndDateTime
    )