我需要一个TSQL查询,它返回自给定开始日期以来的所有秒数。我将使用它来对外连接另一个表,以查看每秒下载的字节数。我正在使用Sql Server 2008。
答案 0 :(得分:5)
我在这里开始拍摄,但这是一个开始:
DECLARE @STARTDATE DATETIME
DECLARE @ENDDATE DATETIME
SET @STARTDATE = '05/01/2010'
SET @ENDDATE = GETDATE()
-- Find the seconds between these two dates
SELECT DATEADD(SECOND, Number, @StartDate) AS N
FROM Numbers
WHERE Number < DATEDIFF(SECOND, @STARTDATE, @ENDDATE)
这假设一个名为Numbers的表,其中一个名为Number的列包含从1开始的值。能够获得整整一个月的结果,你需要拥有高达250万左右的价值。我将查询保持在一天,这意味着Numbers表可以使用小于100,000的值。
这是一篇关于数字表格的精彩文章:http://www.sqlservercentral.com/articles/Advanced+Querying/2547/
需要注册,但它是免费的。如果您进行任何严肃的SQL Server编程,这个站点非常有用。
答案 1 :(得分:1)
您可能需要一个辅助数字表。您是否需要所有秒数代表,或者您可以只舍入到最接近的秒数并按此分组?
我们在这里讨论了多少秒,以及您目前存储的格式是什么。它们是否已经四舍五入?
如果没有那么可能为了避免每次舍入或进行BETWEEN类型查询的开销(以及重复的DATEADD),也许你可以在插入/更新时使用Marc的DATEDIFF答案来存储来自某个基准日期的秒数然后使用计算出的数字列加入数字表。
从此处创建Numbers表的代码http://web.archive.org/web/20150411042510/http://sqlserver2000.databases.aspfaq.com/why-should-i-consider-using-an-auxiliary-numbers-table.html只是为了添加Brad的答案。
CREATE TABLE dbo.Numbers
(
Number INT IDENTITY(1,1) PRIMARY KEY CLUSTERED
)
WHILE COALESCE(SCOPE_IDENTITY(), 0) <= 1000000
BEGIN
INSERT dbo.Numbers DEFAULT VALUES
END
答案 2 :(得分:0)
DATEDIFF ( s , @FirstDate , @SecondDate )