2012-10-09 42 views
1

我希望將3分鐘步驟(給定開始日期和結束日期)的時間戳記值插入僅有一個時間戳列的表格中。以3分鐘的步驟插入時間戳值

我目前從sql server切換到mysql。我會知道如何爲SQL中的前一個數據庫做到這一點,但我不確定後者。謝謝。

這是我目前(不工作)慘的嘗試:

DELIMITER // 
CREATE PROCEDURE test() 
begin 
    declare StartTS TIMESTAMP DEFAULT null; 
    declare EndTS TIMESTAMP DEFAULT null; 

    set StartTS = '2012-01-01 00:00:00'; 
    set EndTS = '2014-01-01 00:00:00'; 

    start transaction; 
     while StartTS < EndTS do 
     insert into timestamps (TimeStampEntry) values (StartTS); 
     SET StartTS = StartTS + INTERVAL 3 MINUTE; 
     end while; 
     commit; 
end 
// 

DELIMITER ; 

call test(); 

PS:

create table TimeStamps (
     Id INTEGER NOT NULL AUTO_INCREMENT, 
     TimeStampEntry DATETIME, 
     primary key (Id) 
    ) 

當前的存儲過程:

DELIMITER $$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `myProc`(IN t1 timestamp, IN t2 timestamp) 
BEGIN 

    WHILE t1 <= t2 DO 
INSERT INTO timestamps (TimeStampEntry) Values (t1) ; 
    SET t1 = DATE_ADD(t1, INTERVAL 180 SECOND); 
    #SET t1 = t1 + INTERVAL 180 SECOND; 
    END WHILE; 
END 

電話:

CALL myProc('2010-01-01 00:00:00', '2014-01-01 00:00:00'); 

回答

3

嘗試是這樣的:

CREATE PROCEDURE myProc(IN t1 timestamp, IN t2 timestamp) 
BEGIN 

    WHILE t1 <= t2 DO 
INSERT INTO test (ts) Values (t1) ; 
    SET t1 = DATE_ADD(t1, INTERVAL 3 MINUTE); 
    END WHILE; 
END; 


CALL myProc(now(), ADDDATE(NOW(), INTERVAL 15 MINUTE)); 

http://sqlfiddle.com/#!2/5672e/9

或更改線路:

SET StartTS = StartTS + INTERVAL 3 MINUTE; 

SET StartTS = ADDDATE(StartTS, INTERVAL 3 MINUTE); 
+0

優秀,得益於 – cs0815

+0

它的工作原理十歲上下。但是,我似乎得到了奇怪的錯誤:錯誤代碼:1292.不正確的日期時間值:'2010-03-28 01:00:00'有什麼想法? – cs0815

+0

你可以在sqlfiddle重現,所以我可以看看? – Nin