首页 > 解决方案 > 如何使用触发器解决我的控制号问题

问题描述

大家好,这是我的触发代码,在用户插入数据并选择 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

标签: sqltriggers

解决方案


要确定控制编号,您使用的是公式

DATE_FORMAT(NOW(), '%Y%m')

它将查看当前日期,这就是你得到的原因202103(目前是三月,第三个月)。你应该改用

DATE_FORMAT(pr_date, '%Y%m')

推荐阅读