插入前触发器中的子字符串、计数和连接?
Substring, Count, and Concat in a Before Insert Trigger?
我遇到了一个难题,我需要让 MySQL 数据库根据输入的新客户名称的前 3 个字符创建客户编号,并附加一个递增的值。例如:
Table 客户:
+----+----------------------------------------------+--------------+
| id | clientName | clientNumber |
+----+----------------------------------------------+--------------+
| 1 | Accelerated Learning | ACC00 |
| 2 | Acceleration Systems | ACC01 |
| 3 | Acme,Inc. | ACM00 |
通常我会在前端的提交表单中执行此操作,但由于无法解释的原因,规范希望由数据库处理此操作。我想写这样的东西,但写不对:
触发器:
CREATE DEFINER = CURRENT_USER TRIGGER `crmdev`.`clients_BEFORE_INSERT` BEFORE INSERT ON `clients` FOR EACH ROW
BEGIN
DECLARE prefix varchar(3);
DECLARE suffix INT(3);
SET prefix = SUBSTRING(NEW.clientName,1,3);
SET suffix = (
SELECT COUNT(*),SUBSTRING(clientName,1,3) = prefix + 1;
SET NEW.clientNumber = CONCAT(prefix,suffix);
END
提前感谢help/guidance!
您在 suffix
作业中存在语法错误。您缺少 FROM
和 WHERE
子句,您需要将 1
添加到计数中,而不是 prefix
.
SET suffix = (
SELECT COUNT(*)+1
FROM clients
WHERE SUBSTRING(clientName,1,3) = prefix);
如果对其他人有帮助并感谢 Barmar,这是成品:
触发器:
DECLARE prefix varchar(3);
DECLARE suffix INT(3);
SET prefix = SUBSTRING(NEW.clientName,1,3);
SET suffix = (
SELECT COUNT(*)+1
FROM clients
WHERE SUBSTRING(clientName,1,3) = prefix);
SET NEW.clientNumber = UPPER(CONCAT(prefix,LPAD(suffix,3,0)));
我遇到了一个难题,我需要让 MySQL 数据库根据输入的新客户名称的前 3 个字符创建客户编号,并附加一个递增的值。例如:
Table 客户:
+----+----------------------------------------------+--------------+
| id | clientName | clientNumber |
+----+----------------------------------------------+--------------+
| 1 | Accelerated Learning | ACC00 |
| 2 | Acceleration Systems | ACC01 |
| 3 | Acme,Inc. | ACM00 |
通常我会在前端的提交表单中执行此操作,但由于无法解释的原因,规范希望由数据库处理此操作。我想写这样的东西,但写不对:
触发器:
CREATE DEFINER = CURRENT_USER TRIGGER `crmdev`.`clients_BEFORE_INSERT` BEFORE INSERT ON `clients` FOR EACH ROW
BEGIN
DECLARE prefix varchar(3);
DECLARE suffix INT(3);
SET prefix = SUBSTRING(NEW.clientName,1,3);
SET suffix = (
SELECT COUNT(*),SUBSTRING(clientName,1,3) = prefix + 1;
SET NEW.clientNumber = CONCAT(prefix,suffix);
END
提前感谢help/guidance!
您在 suffix
作业中存在语法错误。您缺少 FROM
和 WHERE
子句,您需要将 1
添加到计数中,而不是 prefix
.
SET suffix = (
SELECT COUNT(*)+1
FROM clients
WHERE SUBSTRING(clientName,1,3) = prefix);
如果对其他人有帮助并感谢 Barmar,这是成品:
触发器:
DECLARE prefix varchar(3);
DECLARE suffix INT(3);
SET prefix = SUBSTRING(NEW.clientName,1,3);
SET suffix = (
SELECT COUNT(*)+1
FROM clients
WHERE SUBSTRING(clientName,1,3) = prefix);
SET NEW.clientNumber = UPPER(CONCAT(prefix,LPAD(suffix,3,0)));