在 MySQL 中创建一个列,根据前一列中是否存在子字符串自动填充 0 或 1
Create a column in MySQL that automatically fills 0 or 1 based on presence of substring on previous column
我在 MySQL 有这个数据库,其中包括以下列:Country、Level 和 Branch。
我想要这个数据库的三个新列,指示这三列中的每一列是否有逗号 (1) 或没有逗号 (0)。像这样:
我希望这些列是自动的,因此可以将新的观察结果添加到 table 而无需 运行 一次又一次地使用相同的脚本来更新那里显示的值。我知道如何在 excel 中使用 IF 函数执行此操作,但我卡在了 MySQL 中。我试过这个:
alter table countries
add bol_coutnry int GENERATED ALWAYS AS (if(`COUNTRY` LIKE '%{$,}%',1));
在相同代码的其他变体中甚至没有 运行。有任何想法吗?
谢谢
您只需编写一个触发器即可完成这项工作。
CREATE DEFINER=`root`@`localhost` TRIGGER `countries_before_insert` BEFORE INSERT ON `countries` FOR EACH ROW BEGIN
SET NEW.bot_country = IF(POSITION(',' IN NEW.Country) = 0, 0, 1);
SET NEW.bot_level = IF(POSITION(',' IN NEW.Level) = 0, 0, 1);
SET NEW.bot_branch = IF(POSITION(',' IN NEW.Branch) = 0, 0, 1);
END
它将自动填充您 table 中的这些列。确保你也写了 BEFORE UPDATE
触发器,所以当更改值时也应该更新这 3 列。
我在 MySQL 有这个数据库,其中包括以下列:Country、Level 和 Branch。
我想要这个数据库的三个新列,指示这三列中的每一列是否有逗号 (1) 或没有逗号 (0)。像这样:
我希望这些列是自动的,因此可以将新的观察结果添加到 table 而无需 运行 一次又一次地使用相同的脚本来更新那里显示的值。我知道如何在 excel 中使用 IF 函数执行此操作,但我卡在了 MySQL 中。我试过这个:
alter table countries
add bol_coutnry int GENERATED ALWAYS AS (if(`COUNTRY` LIKE '%{$,}%',1));
在相同代码的其他变体中甚至没有 运行。有任何想法吗? 谢谢
您只需编写一个触发器即可完成这项工作。
CREATE DEFINER=`root`@`localhost` TRIGGER `countries_before_insert` BEFORE INSERT ON `countries` FOR EACH ROW BEGIN
SET NEW.bot_country = IF(POSITION(',' IN NEW.Country) = 0, 0, 1);
SET NEW.bot_level = IF(POSITION(',' IN NEW.Level) = 0, 0, 1);
SET NEW.bot_branch = IF(POSITION(',' IN NEW.Branch) = 0, 0, 1);
END
它将自动填充您 table 中的这些列。确保你也写了 BEFORE UPDATE
触发器,所以当更改值时也应该更新这 3 列。