mysql - 将字符串表达式解析为列

标签 mysql sql sql-server sql-server-2008 stored-procedures

我有一个字符串,例如 32,21C2L5N8C 存储在一个字段中。现在我想将该字符串扩展为如下:

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,CCCCCCCCCCCCCCCCCCCCCLLNNNNNCCCCCCCC

得到上面的字符串后,我想计算逗号、C、L和N的数量。

有人可以帮我解决这个问题吗?

最佳答案

您可以提取数字无数字字符,然后复制每个字符,在SQL Server中您可以使用 patindexreplicate函数(解释在代码中):

--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/

相关文章:

sql - 如何使用 T-SQL 从 URL 读取 XML?

SQL Server 'Resume Next' 等效项

Mysql子选择排名

mysql - 在 group by 语句中使用聚合列 - MYSQL

php - MySQL插入语句外键自动添加pk

sql - 我可以在 OVER 子句中使用变量而不是整数吗

sql-server - 检索 SQL 代理作业的特定错误

java - 在 Debian 服务器上使用来自 Tomcat 的 JDBC

mysql - 过滤具有一个项目但同时没有另一个项目的订单

sql - 如何在sqlite中选择带空值的尾部?