我有一个表 book_meetings,其中有 70000 条记录,我想将此数据迁移到另一个表中,对此进行很少的修改,为此我创建了一个 Mysql 存储过程。记录被插入到新表中,但值设置为空。
我仅从 book_meetings
表中选择四列,并希望将它们插入表中。
id int
date date
meet_at time
duration_in_hours decimal
我想要的是根据上述值计算start_date
和end_date
。
例如:
if date ="2017-09-08" , meet_at is "09:00:00" and duration_in_hours is 1.5
那么start_date将为“2017-09-08 09:10:00”
end_date= start_date_duration_in_hour
end_date will be "2017-09-08 09:10:00"
start_date = concat date and meet_at
end_date = start_date + duration_in_hours
and insert this values in new table
如果还有更好的想法请提出
CREATE PROCEDURE book_meetings8()
BEGIN
-- Declare local variables
DECLARE done BOOLEAN DEFAULT 0;
DECLARE meet_at TIME;
DECLARE start_date DATETIME;
DECLARE tmp_date VARCHAR(255);
DECLARE end_date DATETIME;
DECLARE end_recurring_date DATE;
DECLARE date1 DATE ;
DECLARE id INTEGER(11);
DECLARE duration DECIMAL(8,2);
DECLARE minutes INTEGER(11);
-- Declare the cursor
DECLARE iter CURSOR
FOR
SELECT id,date, meet_at,duration_in_hours FROM
book_meetings LIMIT 100;
-- Declare continue handler
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
-- Open the cursor
OPEN iter;
-- Loop through all rows
REPEAT
-- Get order number
FETCH iter INTO id,date1,meet_at,duration;
SET minutes = duration * 60;
SET start_date = CAST(date1 as char) + " "+CAST(meet_at as
char);
SET end_date = CAST(start_date as datetime) + INTERVAL
minutes MINUTE;
INSERT INTO
book_meetings_1(start_date,end_date)
VALUES(start_date,end_date);
-- End of loop
UNTIL done END REPEAT;
-- Close the cursor
CLOSE iter;
END;
最佳答案
我已经用单个 SQL 语句解决了上述问题(一次插入和更新所有记录,无需存储过程)
INSERT INTO temp_diary.book_meetings ( id,start_date,end_date) SELECT id,CONCAT(`date`, ' ', `meet_at`) as start_date,DATE_ADD(concat(date,' ',meet_at), INTERVAL `duration_in_hours` HOUR) as end_date FROM estate.book_meetings;
关于mysql - 使用 Mysql 存储过程更新和插入表行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46175719/