2016-05-05 7 views
1

で日付の2セット間の各日付を格納します:はどのように私はそうのようなテーブルA持っている別の列

id | valid_from_date |  valid_to_date  | 
1 | 2015-05-01 23:15:01 | 2015-05-02 10:20:23 | 
2 | 2015-07-13 10:25:02 | 2015-07-14 18:20:45 | 

を私はIDごとvalid_from_date & valid_to_date間のすべての日付を取得できるようにしたいです、次の形式で新しい表を作成します:

id | date  | 
1 | 2015-05-01 | 
1 | 2015-05-02 | 
2 | 2015-07-13 | 
2 | 2015-07-14 | 

これを達成するにはどうすればよいでしょうか?

ありがとうございます。

答えて

1

としてTableBのを作成する....私はそれが最善の方法かではありませんわかりません....しかし、それは必要な出力が得られます。

CREATE TABLE `tableb` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`dates` date DEFAULT NULL, 
`aid` int(11) DEFAULT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; 

さて、

insert into tableb(aid,dates) select id,date(valid_from_date) as dates 
from tablea union select 
id,date(valid_to_date) as dates from tablea order by id; 

5つあります。上:今

CREATE PROCEDURE `test_procedure`() 
BEGIN 
DECLARE aid INT; 
DECLARE avalid_from_date date; 
DECLARE avalid_to_date date; 
DECLARE tempdt date; 
DECLARE done INT DEFAULT FALSE; 
DECLARE getdates CURSOR FOR SELECT * from tablea; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 

OPEN getdates; 

read_loop: LOOP 
FETCH getdates INTO aid,avalid_from_date,avalid_to_date; 

    IF done THEN 
    LEAVE read_loop; 
END IF; 

set tempdt=date(avalid_from_date); 

WHILE (tempdt <= date(avalid_to_date)) do 
    insert into tableb(dates,aid) values(tempdt,aid); 
    set tempdt=tempdt+INTERVAL 1 DAY; 
end while; 


END LOOP; 
CLOSE getdates; 
END 

、ジャストcall test_procedure; すべての出力行がテーブルBに挿入されます。

+0

こんにちはSmitaさん、ありがとうございますが、あなたの構文を完全に理解しているかどうかはわかりません。あなたは詳細を教えていただけますか?ソーステーブル(A)と宛先テーブル(B)はどちらですか? – logicpro

+0

私は自分の答えを理解しました –

+0

私はあなたの答えを理解していますが、問題はIDが単なる「カウンタ」ではなく、関連性のある固有の番号です。たとえば、テーブルAは '43225,43223'などのid値を持ちます。したがって、私は表Aから(それぞれのid値とそのid値の関連する日付)を表Bにコピーする必要があります。助言してください。 – logicpro

関連する問題