我们如何读取varchar列,取出整数部分,并使用脚本添加新列,使整数部分递增



我需要为以下场景编写一个脚本:

我们有一个列X,该列X的行值为X01、X02、X03、X04……

我遇到的问题是,我需要根据最后一行的值X04向该表添加另一行,我能够确定我需要工作的逻辑,如下所示:

  1. 我需要读取值X04
  2. 取整数部分04
  3. 增量1=>05
  4. 将列值另存为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

最新更新