插入前触发器中的子字符串,计数和Concat?

时间:2018-11-01 00:04:01

标签: mysql count substring concat database-trigger

我有一个难题,我需要让MySQL数据库根据输入的新客户名称的前3个字符创建客户编号,并添加一个递增值。例如:

表客户端:

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

在此先感谢您的帮助/指导!

2 个答案:

答案 0 :(得分:0)

您在suffix分配中存在语法错误。您缺少FROMWHERE子句,需要将1添加到计数中,而不是添加到prefix中。

SET suffix = (
    SELECT COUNT(*)+1
    FROM clients
    WHERE SUBSTRING(clientName,1,3) = prefix);

答案 1 :(得分:0)

如果对他人有帮助,这里是成品,感谢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)));