我有一个客户表,该表中的字段为 id_customer ,名称,生日。 / p>
id_customer 数据类型为CHAR(20),格式为' CUSTyyyymmdd00000000 ',id中的 yyyymmdd 是客户的生日。最后8位数字根据生日在id_customer字段上增加。
输出示例: CUST1995020100000001,CUST1995020100000002,CUST1995030300000001,CUST1995030300000002 ,依此类推。
我已经创建了一个增加最后一位数字的功能:
DELIMITER $$
CREATE
FUNCTION get_increment_id_cust()
RETURNS INT
BEGIN
DECLARE id INT;
SET id =( SELECT IFNULL(MAX(CONVERT(RIGHT(id_customer,8),INT)),0) AS id
FROM customer );
RETURN id+1;
END$$
DELIMITER ;
并带有以下代码:
SELECT SUBSTRING(CONCAT('00000000',get_increment_id_cust()),LENGTH(CONCAT('00000000',get_increment_id_cust()))-7,8);
我有8位数字,例如00000001、00000002,依此类推。
我尝试使用另一个concat添加前缀,但是无法添加其他生日。
又如何在插入触发器之前实现它,这样当我添加另一行时它会自动增加?
答案 0 :(得分:0)
我建议您不使用当前的方法,而是维护一个包含以下两列的表:
(id, date_of_birth, ...)
也就是说,只需将出生日期存储在单独的善意栏中。至于ID值,您可能依赖于自动递增列,MySQL保证该列将始终生成新的唯一值。如前所述,如果您仍然需要id_customer
,则可以在查询时始终生成它,例如
SELECT
CONCAT('CUST', DATE_FORMAT(date_of_birth, '%Y%m%d'), id) AS id_customer
FROM yourTable;
您的id_customer
由几个不同的部分组成,每个部分实际上都属于一个单独的列。我建议您使用上述方法简化维护工作,并简化生活。