【发布时间】:2013-02-04 03:55:50
【问题描述】:
如何使用字母和数字自动增加 ID 编号,例如“KP-0001”它将增加到“KP-0002”
谢谢!
【问题讨论】:
标签: mysql sql phpmyadmin
如何使用字母和数字自动增加 ID 编号,例如“KP-0001”它将增加到“KP-0002”
谢谢!
【问题讨论】:
标签: mysql sql phpmyadmin
这是一篇有用的文章
但基本上我鼓励您在此基础上创建自己的算法。您可以在BEFORE INSERT 触发器中添加该算法。或者您可以在前端执行此操作。
算法伪代码示例
【讨论】:
我尝试以多种方式做到这一点,但无法找到解决方案...我也使用了触发器,但这也对我没有帮助...
但我找到了一个快速的解决方案......
例如,您希望您的员工拥有员工代码“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 ) ;
【讨论】:
您不能自动递增 varchar 数据类型。这样做的另一种方法是将 varchar 列分成两个不同的列,一个将具有整数部分,另一个将具有字母表,就像您的情况 KP- 一样,一旦您自动递增所有整数行,只需连接这两列
【讨论】:
【讨论】:
自增是一个整数,因此无法添加文本。
查看this 问题以获取其他参考资料。
【讨论】:
创建一个过程,在我的例子中是 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
【讨论】: