gpt4 book ai didi

MYSQL - 用于将 VARCHAR 中的时间转换为 INTEGER 中的秒的触发器正在插入多行,而它应该只插入

转载 作者:行者123 更新时间:2023-11-29 09:56:17 24 4
gpt4 key购买 nike

现在,事情是这样的:

当我向 tbl_a 插入包含 time1 和 time2 值的行时,我的触发器在 tbl_b 中插入 2 个不同的行,当它应该插入 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
$$

最佳答案

您将获得两行,因为您正在进行两次插入。您需要做的是找出两个新值是什么,然后同时插入这两个值。这应该可以满足您的要求:

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
$$

请注意,通过实际搜索小时和分钟值之间的 : 并使用它来控制子字符串选择,我的代码更加稳健。

关于MYSQL - 用于将 VARCHAR 中的时间转换为 INTEGER 中的秒的触发器正在插入多行,而它应该只插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53772495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com