首页 > 解决方案 > 1000 后自动将字符串递增 1 不起作用

问题描述

我正在使用此查询将字符串自动增加 1

Select Concat('BS-00',Max(stuff([ProjectN], 1, patindex('%[0-9]%', [ProjectN])-1, ''))+1)
From [dbo].[ProjectInfo]

所以让我们说我现在的

[ProjectN]='BS-00995' 

我希望下一个 ProjectN 是 BS-00996
但在 BS-001000 之后我总是得到 BS-001000
为什么会这样,我该如何解决

标签: sql-server

解决方案


没有测试数据很难,但我的猜测是,使用MAX()存储为文本的数字并不能像你期望的那样工作。以下语句重现了此问题:

SELECT 
    CONCAT(
        'BS-00',
        MAX(STUFF([ProjectN], 1, PATINDEX('%[0-9]%', [ProjectN]) - 1, '')) + 1
    )
FROM (VALUES
    ('BS-00998'),
    ('BS-00999'),
    ('BS-001000')
) ProjectInfo (ProjectN)

一种可能的解决方案是使用CONVERT()

SELECT 
    CONCAT(
        'BS-00',
        MAX(CONVERT(int, STUFF([ProjectN], 1, PATINDEX('%[0-9]%', [ProjectN]) - 1, ''))) + 1
    )
FROM (VALUES
    ('BS-00998'),
    ('BS-00999'),
    ('BS-001000')
) ProjectInfo (ProjectN)

推荐阅读