我需要一個TSQL查詢,它返回自給定開始日期以來的所有秒數。我將使用它來使外部聯接與另一個表相關,以查看每秒下載的字節數。我正在使用Sql Server 2008.TSQL查詢 - 返回兩個日期之間的所有秒
回答
我從臀部射擊這裏,但這裏是一個開始:
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)
這是假定表被叫號碼,與從1包含值命名列數。能夠獲得整個月的結果,你將需要有大約250萬的價值。我可能會把查詢時間縮短到一天,這意味着Numbers表的數值可能小於100,000。
這裏有一個數字表一大篇:需要http://www.sqlservercentral.com/articles/Advanced+Querying/2547/
註冊,但它是免費的。如果你做任何嚴肅的SQL Server編程,這個站點是非常有用的。
您可能需要一個輔助數字表。你是否需要全部的秒數,或者你是否可以輪到最接近的秒數,然後按組進行分組?
我們在此討論的還有多少秒鐘,以及您目前將它們存儲在什麼格式中。它們是否已經四捨五入?
如果沒有,那麼也許要避免將它們四捨五入或每次做一個BETWEEN類型查詢(以及重複的DATEADDs)的開銷,也許您可以在插入/更新時使用Marc的DATEDIFF答案來存儲某些基礎的秒數日期,然後使用計算出的數字列加入到數字表中。
代碼從這裏創建數字表http://sqlserver2000.databases.aspfaq.com/why-should-i-consider-using-an-auxiliary-numbers-table.html只需添加到布拉德的答案。
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
您可能想詳細說明。我可能不是唯一一個不知道你在說什麼的人。 – Gabe 2010-05-08 21:29:33
打敗我吧。這肯定聽起來像是一個數字表的完美使用。 – BradBrening 2010-05-08 21:29:54
DATEDIFF (s , @FirstDate , @SecondDate)
- 1. MySQL返回兩個日期之間的所有記錄
- 2. 兩個日期之間的TSQL搜索查詢
- 3. Oracle:SQL:在兩個日期時間字段之間返回秒數
- 4. SQL查詢返回兩個日期之間的行
- 5. 返回多個日期範圍之間的所有日期
- 6. 兩個日期之間的SQALCHEMY查詢
- 7. 在兩個日期之間查詢所有Hibernate Envers版本
- 8. 查詢獲取這兩個日期之間的所有日期的計數
- 9. SQL Server 2005簡單查詢獲取兩個日期之間的所有日期
- 10. MySQL查詢與回報之間只有兩個日期
- 11. 兩個日期之間的秒差?
- 12. SQL查詢凡之間兩個日期
- 13. 如何獲取兩個日期之間的所有日期?
- 14. 選擇兩個所選日期之間的所有日期
- 15. 如何生成兩個日期之間的所有日期
- 16. 兩個日期之間的所有日期,間隔30分鐘
- 17. mysql查詢兩個日期字段之間的日期
- 18. 用兩個date_time列之間的當前日期查詢日期
- 19. SQL查詢來選擇兩個日期之間的日期
- 20. 兩個日期之間的SQL查詢日期差異
- 21. SQL查詢選擇兩個日期之間的日期
- 22. 創建兩個日期之間的所有日期的向量
- 23. SQL查詢,其中日期時間之間有兩個
- 24. 一種方法,返回兩個日期之間的差異
- 25. 返回開始日期和結束日期列所示範圍之間的各個日期的查詢?
- 26. PHP/SQL - 從兩個日期之間的SQL查詢返回布爾結果
- 27. 兩個日期之間的時間間隔返回無
- 28. sql server打印兩個日期列之間的所有日期
- 29. MySQL選擇兩個日期之間的所有日期
- 30. MySql查詢兩個日期之間的任何日期是在兩個日期之間
我認爲'Number <= DATEDIFF(SECOND,@StartDate,@EndDate)'會更好,因爲它可以使用索引,並且您在使用where子句中的別名時會有問題。 (+1雖然打我讓代碼) – 2010-05-08 22:02:01