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

Cannot increment properly in primary key when its datatype is varchar

我想生成一个主键,如 'A-1'、'A-2'、'A-3'...直到 'A-1000'。此列的数据类型为 varchar(7),table 名称为 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 服务器中,您可以:

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