Sql 查找下一个可用的产品ID

Sql 查找下一个可用的产品ID,sql,numbers,product,next,Sql,Numbers,Product,Next,首先,我必须为问题的简单性道歉,但我对SQL是新手,正在为查询而挣扎 我有一个数据库,其中列出了我们的产品编号。我想创建一个查询,告诉我们下一个可用编号是什么 产品编号以000000.00000的格式记录在产品ID栏中 前6个数字用于管道类型,第2个5个数字用于产品变体(例如不同颜色)。我唯一感兴趣的部分是查找产品ID的下一个可用编号(前6个编号) 在我找到该ID后,不会有被使用的危险,因为我将是唯一管理该ID的人 我试过: 从产品中选择IsNull(max(Prod_ID),0)+1作为Max

首先,我必须为问题的简单性道歉,但我对SQL是新手,正在为查询而挣扎

我有一个数据库,其中列出了我们的产品编号。我想创建一个查询,告诉我们下一个可用编号是什么

产品编号以000000.00000的格式记录在产品ID栏中

前6个数字用于管道类型,第2个5个数字用于产品变体(例如不同颜色)。我唯一感兴趣的部分是查找产品ID的下一个可用编号(前6个编号)

在我找到该ID后,不会有被使用的危险,因为我将是唯一管理该ID的人

我试过:

从产品中选择IsNull(max(Prod_ID),0)+1作为MaxSID

但是我得到一个“转换varchar值时转换失败”失败。无效“到数据类型int”

提前感谢

试试这个:

declare @Prod_ID varchar(20)
set @prod_id = '000000.00000'

select cast(
        substring(@prod_id,8,5) -- Get second part of string
        as int) +1 as TheNext
  • 子字符串提取ID的第二部分
  • 强制转换将其转换为整数
  • +1给出下一个值
所以你实际的代码会读出来

SELECT cast(substring(prod_id,8,5) as int) +1 as TheNext FROM table WHERE prod_id=123

注意:尽管上述方法可行,但我同意关于重新设计的意见(如果允许)

是否有可能将这两个值分开?您在一列中存储了两条信息,这违反了1NF。您使用的是什么DBMS?如果这是sql server,则可以使用序列。老实说,我可能会把它分成两张桌子。产品和产品变体,但这可能是一个比你目前能做的更大的项目。