【问题标题】:How to Auto Increment ID Numbers with Letters and Numbers如何使用字母和数字自动增加 ID 编号
【发布时间】:2013-02-04 03:55:50
【问题描述】:

如何使用字母和数字自动增加 ID 编号,例如“KP-0001”它将增加到“KP-0002”

谢谢!

【问题讨论】:

    标签: mysql sql phpmyadmin


    【解决方案1】:

    这是一篇有用的文章

    但基本上我鼓励您在此基础上创建自己的算法。您可以在BEFORE INSERT 触发器中添加该算法。或者您可以在前端执行此操作。

    算法伪代码示例

    • 获取最后一个 ID [KP-0001]
    • 删除一些字符并将其放入变量[KP-]
    • 将剩余的转换为数字,因为它是一个字符串 [0001]
    • 增加 1 [1 + 1 = 2]
    • 将其转换回字符串并在右侧补零 [0002]
    • 连接变量和新增加的数字[KP-0002]
    • 保存。

    【讨论】:

      【解决方案2】:

      我尝试以多种方式做到这一点,但无法找到解决方案...我也使用了触发器,但这也对我没有帮助...

      但我找到了一个快速的解决方案......

      例如,您希望您的员工拥有员工代码“emp101”、“emp102”等。 这也是自动增量...

      首先创建一个包含三个字段的表,第一个字段包含您想要在开头的字母,即“emp”,第二个字段包含自动递增的数字,即 101,102,..等,第三个字段包含即“emp101”、“emp102”、...等。

      CREATE TABLE employee
      (
      empstr varchar( 5 ) default 'emp',
      empno int( 5 ) AUTO_INCREMENT PRIMARY KEY ,
      empcode varchar( 10 )
      );
      

      现在为 empno 提供一个 auto_increment 值。

      ALTER TABLE employee AUTO_INCREMENT=101;
      

      现在进入主题...每次插入值时,都必须连接前两个字段以获取第三个字段的值

      INSERT INTO employee( empcode )
      VALUES ('xyz');
      UPDATE employee SET empcode = concat( empstr, empno ) ;
      

      【讨论】:

        【解决方案3】:

        您不能自动递增 varchar 数据类型。这样做的另一种方法是将 varchar 列分成两个不同的列,一个将具有整数部分,另一个将具有字母表,就像您的情况 KP- 一样,一旦您自动递增所有整数行,只需连接这两列

        【讨论】:

          【解决方案4】:
          创建表客户( CUSId INT NOT NULL IDENTITY(1, 1) 主键 ,CUSKey AS 'Cus' + RIGHT('000' + CONVERT(VARCHAR(5), CUSId), 6) 持续 ,CusName VARCHAR(50) ,mobileno INT ,性别 VARCHAR(10) )

          【讨论】:

          • 感谢您提供此代码 sn-p,它可能会提供一些有限的短期帮助。一个正确的解释would greatly improve 其长期价值,通过展示为什么这是解决问题的好方法,并将使其对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。
          【解决方案5】:

          自增是一个整数,因此无法添加文本。

          查看this 问题以获取其他参考资料。

          【讨论】:

            【解决方案6】:

            创建一个过程,在我的例子中是 MySQL。

            CREATE PROCEDURE MOSTRAR_CODIGO_CLASE_PRODUCTO()
            BEGIN
                declare max varchar(10);
                declare num int;
                declare CCodigo varchar(10);
                
                set max = (select MAX(Codigo_CP) from CLASE_PRODUCTO);
                set num = (SELECT LTRIM(RIGHT(max,4)));
                if num>=1 and num <=8 then
                    set num = num + 1;
                    set CCodigo = (select concat('CP000'  ,  CAST(num as CHAR)));
                elseif num>=9 and num <=98 then
                    set num = num + 1;
                    set CCodigo = (select concat('CP00'  ,  CAST(num as CHAR)));
                elseif num>=99 and num <=998 then
                    set num = num + 1;
                    set CCodigo = (select concat('CP0'  ,  CAST(num as CHAR)));
                elseif num>=999 and num <=9998 then
                    set num = num + 1;
                    set CCodigo = (select concat('CP'  ,  CAST(num as CHAR)));
                else 
                    set CCodigo=(select 'CP0001');
                end if;
                
                SELECT MAX(CCodigo) AS Codigo_CP FROM CLASE_PRODUCTO;
            END $
            
            
            Java Class
            
            public static boolean insertarClaseProducto(ClaseP cp){
                    boolean resp = false;
                    
                    Connection cn;
                    Connection con = new Connection();
                    cn = con.connect();              
                    
                    try{
                        CallableStatement cs = cn.prepareCall("CALL REGISTRAR_CLASE_PRODUCTO (?)");
                        cs.setString(1, cp.getNombreCP());
                        int i = cs.executeUpdate();
                        
                        if(i==1)
                            resp = true;
                        else
                            resp = false;
                        
                    }catch(Exception e){System.out.println(e);}
                    return resp;
                }
            

            返回:

            Codigo_MP   Nombre_MP    Estado_MP
            MP0001      LG           HAB
            MP0002      GENIUS       HAB
            MP0003      MICRONICS    HAB
            MP0004      SONY         HAB
            MP0005      PANASONIC    HAB
            

            【讨论】:

              猜你喜欢
              • 2020-09-04
              • 1970-01-01
              • 1970-01-01
              • 2014-05-18
              • 1970-01-01
              • 1970-01-01
              • 2013-02-11
              • 2018-08-28
              • 1970-01-01
              相关资源
              最近更新 更多