MYSQL - триггер для преобразования времени в VARCHAR в секунды в INTEGER вставляет несколько строк только тогда, когда нужно вставить только - PullRequest
0 голосов
/ 14 декабря 2018

Теперь вот что:

Когда я вставляю в tbl_a строку со значениями для time1 и time2, мой триггер вставляет 2 разные строки в tbl_b , по одному для каждого столбца, когда необходимо вставить 1 строку со значениями для обоих столбцов.

Цель этого триггера - преобразовать данные времени, импортированные в столбец VARCHAR, в секунды в столбце INTEGER.Суть в том, что импортируемые данные могут быть 10:00 или 1000: 00.

Хотя я понимаю, что, возможно, есть более простой способ сделать это, я действительно хотел бы знать, что не так с этим кодом.

Заранее спасибо!

DELIMITER $$
CREATE TRIGGER  tr_one
AFTER INSERT ON tbl_a
FOR EACH ROW 
BEGIN
    IF CHAR_LENGTH(NEW.time1) = 5 THEN 
        INSERT INTO tbl_b(time1) VALUES((((SUBSTRING(NEW.time1, 1, 5) * 60) + SUBSTRING(NEW.time1, 7, 2)) * 60));
        END IF;

    IF CHAR_LENGTH(NEW.time2) = 5 THEN 
        INSERT INTO tbl_b (time2) VALUES (((SUBSTRING(NEW.time2, 1, 5) * 60) + SUBSTRING(NEW.time2, 7, 2)) * 60);
    END IF;
END
$$

1 Ответ

0 голосов
/ 14 декабря 2018

Вы получаете две строки, потому что вы делаете две вставки.Что вам нужно сделать, так это выяснить, каковы оба новых значения, и затем вставят оба из них одновременно.Это должно делать то, что вы хотите:

DELIMITER $$
CREATE TRIGGER tr_one
AFTER INSERT ON tbl_a
FOR EACH ROW 
BEGIN
    DECLARE t1 VARCHAR(10) DEFAULT NEW.time1;
    DECLARE t2 VARCHAR(10) DEFAULT NEW.time2;
    DECLARE c INT;
    SET c = LOCATE(':', t1);
    IF c > 0 THEN
        SET t1 = (SUBSTRING(t1, 1, c-1) * 60 + SUBSTRING(t1, c+1)) * 60;
    END IF;
    SET c = LOCATE(':', t2);
    IF c > 0 THEN 
        SET t2 = (SUBSTRING(t2, 1, c-1) * 60 + SUBSTRING(t2, c+1)) * 60;
    END IF;
    INSERT INTO tbl_b (time1, time2) VALUES (t1, t2);
END
$$

Обратите внимание, что я немного более устойчив с кодом, фактически выполнив поиск : между значениями часа и минуты и используя его для управления подстрокойвыбор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...