SQL查询来选择一个varchar字段

问题描述:

我想选择一个varchar字段的最大值和递增1的值保留其原始格式的最大值。对于前SQL查询来选择一个varchar字段

客户ID。 :​​是价值

加1,然后将其输入到数据库以及其他详细信息。

所以结果应该是像CUS0000002 ..

这是我曾尝试,事实上取得了我想要的东西..

但是,这是做到这一点的最好办法?

SELECT 
    CONCAT('CUS', RIGHT(CONCAT('000000', CONVERT((CONVERT(MAX(RIGHT(customer_id, 7)) , UNSIGNED) + 1), CHAR(10))), 7)) AS customer_id 
FROM customer_master 
+0

是否总是3个字母和数字的休息? – 2012-08-16 09:06:18

+2

这对于并发更新不安全。更好地使用一个SEQUENCE。 – Thilo 2012-08-16 09:06:35

+4

只要使用一个数字,但始终按照您的意愿格式化客户编号输出,是不是更明智? – BugFinder 2012-08-16 09:06:37

我同意评论者的意见,数据库不应该像这样设计。但是,如果你坚持了下来,我建议这样的事情,以获得最高值:

select customer_id from customer_master 
    order by customer_id desc 
    fetch first row only; 

然后生成通过对返回的结果进行你的逻辑的新值。这会更快,因为子字符串操作会很慢,在这种情况下,它们只会执行一次。

(假设每个ID都会有相同的前缀,即“CUS”;然而,你的代码似乎暗示)。

SELECT MAX(RIGHT(CusID, 7)) AS id 
FROM tblCustomer