在SQL Server

时间:2018-04-08 05:19:13

标签: sql-server select

我有一个带有'Number'列的表,其中包含INV-00100,INV-00101,INV-00102,INV-00103等值。

我希望以“INV-00103”等格式获得最高值+1。怎么可能? 有什么建议??

我试过这个查询

SELECT 
    ISNULL(MAX(CAST(SUBSTRING(Number, 5, LEN(Number) - 4) AS INT)), 0) AS [MaxNo] 
FROM 
    Table

但是这句话的结果就像“103”一样。我想把这个“103”改为“00103”(共5位数)。

2 个答案:

答案 0 :(得分:2)

尝试下面的步骤。

 DECLARE @TABLE TABLE(Code VARCHAR(100))
 INSERT INTO @TABLE
 VALUES ('INV-00100'),('INV-00101'),('INV-00102') 

 SELECT RIGHT('00000'+ 
  CAST(MAX(TRY_PARSE(SUBSTRING(Code,CHARINDEX('-',Code)+1,
  LEN(Code)-CHARINDEX('-',Code)) AS INT) + 1) AS VARCHAR(10)),5)
 FROM @TABLE

<强>输出

00103

修改

  

这工作正常..但如果数量超过会发生什么   99999?这会给出像INV-100000这样的值 - Vahid

 DECLARE @TABLE TABLE(Code VARCHAR(100))
 INSERT INTO @TABLE
 VALUES ('INV-00100'),('INV-00101'),('INV-00102') 

 SELECT 
 (
 CASE WHEN  [Output] > 99999 THEN CAST([Output] AS VARCHAR(100))
  --MORE CONDITION
  ELSE RIGHT('00000'+CAST([Output] AS VARCHAR(100)),5)
  END
 ) AS [Output]

  FROM
 (
 SELECT 
  MAX(TRY_PARSE(SUBSTRING(Code,CHARINDEX('-',Code)+1,
  LEN(Code)-CHARINDEX('-',Code)) AS INT) + 1) AS [Output]
 FROM @TABLE
 ) T

答案 1 :(得分:0)

这样的事情怎么样?

select left('INV-00100',6) + cast(max(cast(right('INV-00100', 5) as int) + 1)as VARCHAR)