2011-06-20 14 views
0

MySqlテーブルが時刻ではなく日数を返しています。私は1日で最小レベルの分を必要とするので、1440レコードには自動入力されるはずですが、私は日数を戻しています。どんな考え?また、私は唯一の時間と分、秒を必要といけないが、時間の形式は常に00であるので、私は秒なしで埋める日付を行う方法を確認していない:00:00'時間ディメンションの塗りつぶしの問題

手順以下の通りです:

DELIMITER // 
CREATE PROCEDURE p_sc_time(IN startdate DATETIME,IN stopdate DATETIME) 
BEGIN 
DECLARE currentdate DATE; 
SET currentdate = startdate; 
WHILE currentdate < stopdate DO 
    INSERT INTO sc_time VALUES (
    NULL, 
    TIME(currentdate), 
    HOUR(currentdate), 
    MINUTE(currentdate)); 
SET currentdate == ADDDATE(currentdate,INTERVAL 1 MINUTE); 
END WHILE; 
END 
// 
DELIMITER ; 
TRUNCATE TABLE sc_time; 
CALL p_sc_time('01-01-01 00:00:00','01-01-01 23:59:59'); 

答えて

1

テストするMySQLの実行インスタンスがありませんが、現在の日付のタイプをDATETIMEに変更する必要があります。

+0

優れた点。今の魅力のように動作します。ありがとう。 – Will

0
DROP TABLE IF EXISTS timedim; 

CREATE TABLE timedim (
    time_id INT NOT NULL auto_increment, 
    fulltime time, 
    hour int, 
    minute int, 
    second int, 
    ampm varchar(2), 
    PRIMARY KEY(time_id) 
) ENGINE=InnoDB AUTO_INCREMENT=1000; 

CREATE TABLE IF NOT EXISTS --#Must be a non-temporary table b/c temp tables cannot be self joined. 
    ints (i INT) AS #(Use select+union for CTAS - Create Table) 
     SELECT (0) i UNION SELECT (1) UNION SELECT (2) UNION SELECT (3) UNION SELECT (4) 
UNION SELECT (5) UNION SELECT (6) UNION SELECT (7) UNION SELECT (8) UNION SELECT (9); 

DROP PROCEDURE IF EXISTS timedimbuild; 

CREATE PROCEDURE timedimbuild() 
BEGIN 

DECLARE v_full_date DATETIME; 

CREATE TEMPORARY TABLE filler(id INT NOT NULL); 

INSERT INTO filler(id) 
SELECT (a.i*10000 + b.i*1000 + c.i*100 + d.i*10 + e.i) id 
FROM ints a JOIN ints b JOIN ints c JOIN ints d JOIN ints e 
WHERE (a.i*10000 + b.i*1000 + c.i*100 + d.i*10 + e.i) <= 86399 --# 86,400 seconds in a day (0 to 86399) 
ORDER BY 1; 

SET v_full_date = '1970-01-01 00:00:00';   

INSERT INTO timedim (
    fulltime , 
    hour , 
    minute , 
    second , 
    ampm 
) SELECT 
    TIME(DATE_ADD(v_full_date, INTERVAL t.id SECOND)), 
    HOUR(DATE_ADD(v_full_date, INTERVAL t.id SECOND)), 
    MINUTE(DATE_ADD(v_full_date, INTERVAL t.id SECOND)), 
    SECOND(DATE_ADD(v_full_date, INTERVAL t.id SECOND)), 
    DATE_FORMAT(DATE_ADD(v_full_date, INTERVAL t.id SECOND), '%p')  
    FROM (SELECT id FROM filler) t; 

DROP TEMPORARY TABLE filler; 
END; 

call timedimbuild(); 
関連する問題