我试图制作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
)
答案 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
)