当主数据类型为varchar时,无法在主键中正确增加

问题描述 投票:0回答:2

我希望生成一个主键,如'A-1','A-2','A-3'......直到'A-1000'。此列的数据类型为varchar(7),表名为sesson。我使用了子串查询,如max(substring(id,3,4)),因为max_id.increament是在前端代码中完成的。我的查询从“A-1”到“A-10”正常工作。当'A-10'保存在数据库中时,它显示'9'作为max_id但它应该显示'10'作为max_id。这样做需要做哪些改变?

select max(substring(id,3,4)) as max_id from sesson

当'A-10'被保存时,它应该显示'10'作为max_id,但它显示'9'作为max_id。

sql sql-server-2014
2个回答
1
投票

在max函数之前使用to_number,如下所示。

select max(to_number(substr(id,3,4))) as max_id from sesson

默认情况下,系统会将子字符串的结果视为字符串。因此,最大值将根据ascii值计算..逐个字符。因此,9将具有最高的ascii值而不是10(因为系统将根据字符逐个比较,9将与1进行比较)


0
投票

将值转换为数字。在SQL Server中,您执行以下操作:

select max(try_convert(int, substring(id, 3, 4))) as max_id
from sesson
© www.soinside.com 2019 - 2024. All rights reserved.