我有一个字符串,例如 32,21C2L5N8C
存储在一个字段中。现在我想将该字符串扩展为如下:
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CCCCCCCCCCCCCCCCCCCCCLLNNNNNCCCCCCCC
得到上面的字符串后,我想计算逗号、C、L和N的数量。
有人可以帮我解决这个问题吗?
最佳答案
您可以提取数字和无数字字符,然后复制每个字符,在SQL Server中您可以使用 patindex和 replicate函数(解释在代码中):
--table variable for holding extracted numbers and none number characters
declare @t table(id int identity(1,1), num int, nonnum char(1))
declare @str1 varchar(50)='32,21C2L5N8C' -- your current given string
declare @int1 varchar(50)='' --for number
declare @str2 varchar(50)='' --for none numeric characters
declare @result varchar(max)=''
while len(@str1)>1 --for parsing the given string
begin
while (Select PatIndex('%[0-9]%', @str1))=1 --extract number
begin
set @int1=@int1+substring(@str1,1,1)
set @str1=substring(@str1,2,len(@str1)-1)
end
set @str2=substring(@str1,1,1) --extract none numeric character
set @str1=substring(@str1,2,len(@str1)-1)
insert into @t(num,nonnum)values (@int1,@str2)
set @int1=''
set @str2=''
end
select @result=@result+replicate(nonnum,num) from @t
select @result
输出:
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CCCCCCCCCCCCCCCCCCCCCLLNNNNNCCCCCCCC
编辑1:如果给定字符串中有前面没有数字的字符,并且您想打印它一次,您可以在中添加额外的while
循环上面的代码:
--table variable for holding extracted numbers and none number characters
declare @t table(id int identity(1,1), num int, nonnum char(1))
declare @str1 varchar(50)='32,21C2L5NC' -- your current given string
declare @int1 varchar(50)='' --for number
declare @str2 varchar(50)='' --for none numeric characters
declare @result varchar(max)=''
while len(@str1)>1 --for parsing the given string
begin
while (Select PatIndex('%[0-9]%', @str1))=1 --extract number
begin
set @int1=@int1+substring(@str1,1,1)
set @str1=substring(@str1,2,len(@str1)-1)
end
set @str2=substring(@str1,1,1) --extract none numeric character
set @str1=substring(@str1,2,len(@str1)-1)
insert into @t(num,nonnum)values (@int1,@str2)
set @int1=''
set @str2=''
while (isnumeric(substring(@str1,1,1))=0 and len(@str1)>=1)
begin
set @str2=substring(@str1,1,1) --extract none numeric character
set @str1=substring(@str1,2,len(@str1)-1)
insert into @t(num,nonnum)values (1,@str2)
set @int1=''
set @str2=''
end
end
select @result=@result+replicate(nonnum,num) from @t
select @result
输出:
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CCCCCCCCCCCCCCCCCCCCCLLNNNNNC
编辑2:如果您想要每个字符的重复次数,只需查询上面代码中的@t
表变量,我的意思是在上面查询的末尾说:
select nonnum [char],num [repeat] from @t
输出:
char repeat
, 32
C 21
L 2
N 5
C 1
关于mysql - 将字符串表达式解析为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29639590/