首页 > 解决方案 > 如何有效地将 + 1 与具有数字部分的 Varchar 值相加?

问题描述

我有一Varchar(9)列有一个代码来识别特定案例,它与主键 ID 不同,因为这个是在一些验证后创建的,而且代码不是按顺序创建的,我们可以在昨天 6 点创建一个案例,另一个一个在 8 点,另一个在 8 点将首先创建其代码,而不是另一个。好吧,问题是每个代码都应该是最后一个代码 + 1,这并不难,但是因为它包含非数字值,我们必须检索最大值,但这并不是很有效。

例如:

ID     Code
1      AA0008-BX
2      AA0010-BX
3      AA0011-BX
4      AA0009-BX

所以在这种情况下,我必须遍历这 4 个值,检索 'AA0011-BX' 作为最大值,在数字部分添加 1 使其成为 'AA0012-BX',另外,我必须添加使其成为数字字符所需的零个数。因为它最后有 AA 和 -BX 部分,我们可以使用 max(Code) 并检索最大的,但这是一个包含数千条记录的表并且速度很慢,我想知道什么是最好的选择。

您将如何使用代码来解决这个问题以使其真正快速?TIA

标签: sqlsql-serverazure

解决方案


假设格式始终是 2 个字母、4 个数字、一个破折号,然后是 2 个字母,正如问题下的评论中所指定的那样,您可以像这样简单地使用substring函数:

declare @next int
select @next = max(cast(substring(code,3,4) as int))+1 from table1
insert into table1 values ('AA'+right('0000'+cast(@next as varchar(4)),4)+'-BX')

推荐阅读