2013-11-25 176 views
2

我需要用ID列和TimeValue列填充SQL Server中的表,並在01/01/200001/01/2020之間以15分鐘的間隔填充。SQL Server:以15分鐘的時間間隔填充表

似乎必須有一個簡單的方法來做到這一點,但我是T-SQL的新手,並且找不到任何簡單的方法來實現這一點。

ID   Timevalue   
------------------------------ 
     0 01/01/2000 00:00:00 
     1 01/01/2000 00:15:00 
     2 01/01/2000 00:30:00 
    ...  ...     
701280 01/01/2020 00:00:00 

如果你有興趣正在使​​用此表與時間戳和值的表加入 - 連接表可能/可能不會有一些間隔空白,但不應該做任何如果在01:00-01:15之間出現多個值,那麼它應該只在01:00和01:15報告值。需要有固定數量的輸出行,以便與Excel中正在生成的其他表「同步」。

如果你能想到一個更好的方法來做到這一點,我會熱衷於知道!

+0

由於您無法確定所尋找的時間值是否有價值,我認爲SQL不是這裏的答案,而編碼語言是您解決問題的方法 – nrathaus

回答

4

您可以使用numbers table

WITH Numbers AS 
(
    SELECT TOP (10000) n = CONVERT(INT, ROW_NUMBER() OVER (ORDER BY s1.[object_id])) 
    FROM sys.all_objects AS s1 CROSS JOIN sys.all_objects AS s2 
) 
SELECT id = ROW_NUMBER() OVER (ORDER BY n), [timestamp] = DATEADD(MINUTE, n, '00:00:00') 
FROM Numbers 
WHERE n % 15 = 0 
1

可以使用Recursive CTE創建時間間隔:

CREATE TABLE Table1 (ID INT IDENTITY(0,1), TIMEVALUE DATETIME); 

DECLARE @start DATETIME; 
DECLARE @end DATETIME; 

SET @start = '20000101'; 
SET @end = '20200101'; 

WITH CTE_DT AS 
(
    SELECT @start AS DT 
    UNION ALL 
    SELECT DATEADD(MINUTE,15,DT) FROM CTE_DT 
    WHERE DT< @end 
) 
INSERT INTO Table1 
SELECT DT FROM CTE_DT 
OPTION (MAXRECURSION 0); 

SQLFiddle DEMO

1

讓我們keept簡單,因爲總是有換過我們的代碼;)

DECLARE @start DATETIME, @end DATETIME 

SET @start = '20000101'; 
SET @end = '20000105'; --SET @end = '20200101'; 

WHILE @start < @end 
BEGIN 
    INSERT INTO Table1 
    VALUES (@start) 

    SET @start = DATEADD(MINUTE, 15, @start) 
END 
相關問題