我有一个带有'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位数)。
答案 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)