我需要为以下场景编写一个脚本:
我们有一个列X,该列X的行值为X01、X02、X03、X04……
我遇到的问题是,我需要根据最后一行的值X04向该表添加另一行,我能够确定我需要工作的逻辑,如下所示:
- 我需要读取值X04
- 取整数部分04
- 增量1=>05
- 将列值另存为X05
我能够通过第一步,这不是很难。我面临的问题是下一步行动。我研究并尝试了很多命令,但都不起作用。
非常感谢您的帮助。谢谢
您似乎在描述:
select concat(left(max(x), 1),
right(concat('00', try_convert(int, right(max(x), 2)) + 1), 2)
from t;
这是在做以下事情:
- 取最左边的字符
- 将两个右边的字符转换为数字并加一
- 将其转换回零填充字符串
这里有一个db<gt;不停摆弄
现在:你想增加一个字符串值似乎已经断了。您应该只使用identity
列或sequence
来分配一个数字。查询表时,可以将值格式化为字符串,也可以使用计算列来存储该值。
尝试以下脚本
CREATE TABLE #table (x varchar(20))
INSERT INTO #table VALUES('X01'),('X02'),('X03'),('X04')
DECLARE @maxno NVARCHAR(20)
DECLARE @maxstring NVARCHAR(20)
DECLARE @finalno NVARCHAR(20)
DECLARE @loopminno INT =1 -- you can change based on the requirement
DECLARE @loopmaxno INT =10 -- how many number we want to increment
WHILE @loopminno < @loopmaxno
BEGIN
select @maxno = MAX(CAST(SUBSTRING(x, PATINDEX('%[0-9]%', x), 100) as INT))
, @maxstring = MAX(SUBSTRING(x, 1, PATINDEX('%[0-9]%',x)-1))
from #table
where PATINDEX('%[1-9]%',x)>0
SELECT @finalno = @maxstring + CASE WHEN CAST(@maxno AS INT)<9 THEN '0' ELSE '' END + CAST(@maxno+1 AS VARCHAR(20))
INSERT INTO #table
SELECT @finalno
SET @loopminno = @loopminno+1
END