1

3分ステップのタイムスタンプ値(開始日と終了日を指定)を、タイムスタンプ列が1つだけのテーブルに挿入したいと思います。

私は現在、SQLサーバーから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)
    )

現在のsproc:

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');
4

1 に答える 1

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);
于 2012-10-09T14:34:01.410 に答える