我希望生成一个主键,如'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。
在max函数之前使用to_number,如下所示。
select max(to_number(substr(id,3,4))) as max_id from sesson
默认情况下,系统会将子字符串的结果视为字符串。因此,最大值将根据ascii值计算..逐个字符。因此,9将具有最高的ascii值而不是10(因为系统将根据字符逐个比较,9将与1进行比较)
将值转换为数字。在SQL Server中,您执行以下操作:
select max(try_convert(int, substring(id, 3, 4))) as max_id
from sesson