sql - 如何使用触发器解决我的控制号问题
问题描述
大家好,这是我的触发代码,在用户插入数据并选择 pr 日期后,它将在数据库中生成一个控制号,但我的问题是当用户选择 01-28-2021 的 pr_date 和添加记录后,它在数据库中显示一个值 202103-1 它必须显示一个值 202101-1
BEGIN
SET @v1 = (SELECT control_number FROM tbl_worklog where DATE_FORMAT(pr_date,'%Y%m') =DATE_FORMAT(NOW(),'%Y%m') ORDER BY id DESC LIMIT 1);
IF (@v1 is null) THEN
SET new.control_number = (CONCAT(CAST(DATE_FORMAT(NOW(),'%Y%m') as CHAR),"-1"));
ELSE
SET @v2 = (CAST(SUBSTRING_INDEX(@v1,"-",-1) as int)+1);
SET new.control_number = (CONCAT(CAST(DATE_FORMAT(NOW(),'%Y%m') as CHAR),"-",CAST(@v2 as char)));
END IF;
END
解决方案
要确定控制编号,您使用的是公式
DATE_FORMAT(NOW(), '%Y%m')
它将查看当前日期,这就是你得到的原因202103
(目前是三月,第三个月)。你应该改用
DATE_FORMAT(pr_date, '%Y%m')
推荐阅读
- hybris - Hybris 商店创建
- django - 无法连接到 amqp://guest:**@127.0.0.1:5672//: [Errno 111] 连接被拒绝
- sql-server - 如何在 MSSQL 中将 YYYY-MM-DD HH:MI:SS 格式转换为 MM-DD-YYYY HH:MI:SS
- ruby - 我怎样才能跳出双'if'块?
- php - 雄辩的关系没有输出
- python - 如何在没有 GUI 的情况下在 Web 上执行操作
- sql-server - 将参数默认值设置为日期/时间
- file-conversion - Firehose 记录格式转换分区
- node.js - 将标头发送到节点js中的客户端后无法设置标头
- mysql - ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' in ubuntu for install mysql