mysql - 如何在插入前使用mysql触发器生成动态ID
问题描述
我需要生成 student_roll_no like20191B01;
我想增加 student_roll_no like 的最后两位数字20191B02,..........20191B10,20191B11
。20191B09
使用以下代码,我可以在那之后起床20191B010
,但我需要20191B10
.
SET NEW.student_roll_no = CONCAT(
YEAR(CURRENT_DATE),
NEW.class_code,
IFNULL(CONCAT('0',(substring((SELECT student_roll_no FROM students WHERE class_code = NEW.class_code ORDER BY created_at DESC LIMIT 1),-2)+1)),'01'))
解决方案
如果您有固定的两位学号,请使用 LPAD。参考
否则此代码段可能会有所帮助:
SET @number = IFNULL(
( substring( ( SELECT `cache`.`value` FROM `cache` ORDER BY `cache`.`value` DESC LIMIT 1 ),- 2 ) + 1 ),
'1'
);
SET NEW.student_roll_no = CONCAT(
YEAR ( CURRENT_DATE ),
NEW.class_code,
IF
(
@number < 10,
CONCAT('0',@number),
@number
)
);
推荐阅读
- r - 德雷克计划拟合 lmer 模型失败
- python - 如何在列表中减去奇数索引值并添加偶数索引值?(a-b+c-d+e)
- javascript - 在 Laravel 应用程序上使用 npm 安装的 JS/CSS 库
- android - 如何摆脱离子页面之间的白色背景
- powershell - 如何从命令行运行 powershell 命令以使用当前目录作为参数?
- python - 即使使用 Selenium 找到元素也没有被点击
- python - pyserial 8位干净?
- python - 我想将我的目标文件保存为 .CSV 而不是 xlsx
- typescript - SyntaxError: Unexpected token {, ES6 Imports
- c++ - 有人可以解释这个链式模板实例化吗?