方法一:
declare @StartTime datetime declare @EndTime datetime set @StartTime ='2019-02-1 00:00' set @EndTime ='2019-02-19 00:00' select dateadd(DAY,number,@StartTime) as dt from master.dbo.spt_values where type ='P' and number <=DATEDIFF(DAY, @StartTime, @EndTime)
原理:利用select number from master.dbo.spt_values where type ='P' 的0-2047個常量生成時間段,缺點是只能生成2048條數據
關於spt_values可以參考http://www.cnblogs.com/cjm123/p/8295844.html
方法二:
select Convert(varchar(20),dateadd(day,(row_number() over(order by getdate()) - 1),'2019-02-1 00:00'),23) as Date from sysobjects
原理:利用row_number給getdate()排序,數據查詢時,每行數據計算的getdate()越來越大,就會排列出從1,2,3...這樣的序列。生成的數據列行數和sysobjects的行數一樣,也可以使用sysobjects以外的表,但必須有數據,一般使用sysobjects,因為sysobjects記錄系統信息,肯定會有數據的。
如果需要生成年、月、小時數據把day換成對應的year、month、hour