sql-server - 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
为什么会这样,我该如何解决
解决方案
没有测试数据很难,但我的猜测是,使用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)
推荐阅读
- c# - 如何在 C# 中将多态性与列表列表一起使用
- powershell - 按检查的顺序对列表视图检查的项目进行排序
- unit-testing - 在 Dart 中,如何验证单元测试中不抛出异常的 void 方法?
- python - Python用一个替换两个标题
- python - 在 Python 中,我应该并行运行多少个进程?
- javascript - ReactJS / Gatsby Js - 将子组件的值传递给父组件以获取按钮 onClick 链接
- rest - 将 PhoneNumber IdentityUser 覆盖为 ForeignKey .Net Core Web Api
- javascript - 道具值没有在vue中将更新的值从父组件发送到子组件
- javascript - 如何在 JS 中编码查询字符串并在 PHP 中解码?
- python - 熊猫根据列值添加行