SQL Server中对字符串拆分与合并的语句
发布时间:2023-12-28 21:03:39 所属栏目:MsSql教程 来源:DaWei
导读: 今天这篇我们来学习和了解“SQL Server中对字符串拆分与合并的语句是什么”,下文的讲解详细,步骤过程清晰,对大家进一步学习和理解“SQL Server中对字符串拆分与合并的语句
今天这篇我们来学习和了解“SQL Server中对字符串拆分与合并的语句是什么”,下文的讲解详细,步骤过程清晰,对大家进一步学习和理解“SQL Server中对字符串拆分与合并的语句是什么”有一定的帮助。有这方面学习需要的朋友就继续往下看吧! STRING_AGG(合并):多行数据合并成一个字符串,以逗号隔开。 STRING_SPLIT(拆分):一个字符串,拆分成多行。 一、多行数据合并成一个字符串 1、通过 FOR xml path('') 合并字符串记录 根据name字段,合并code declare @table1 table ( id int ,code varchar(10) , name varchar(20) ); insert into @table1 ( id,code, name ) values ( 1, 'm1','a' ), ( 2, 'm2',null ), ( 3, 'm3', 'c' ), ( 4, 'm2','d' ), ( 5, 'm1','c' ); select * from @table1; select name, files=stuff((select ','+convert(varchar, code) from @table1 b where a.name=b.name for xml path('')), 1, 1, '') from @table1 a group by name; 2、MS SQL Server的2017新增了STRING_AGG()是一个聚合函数 它将由指定的分隔符分隔将字符串行连接成一个字符串。 它不会在结果字符串的末尾添加分隔符。 SELECT name, string_agg(code,';') files FROM @table1 GROUP BY name; 二、一个字符串拆分成多行 1、利用XML解析方式(推荐) declare @moulds varchar(4000); set @moulds='55-480730-03, 55-487780-01, , 55-487780-02 '; declare @table1 table(col1 nvarchar(4000)); declare @table2 table(col1 nvarchar(40),xmlval1 xml); insert into @table1 values(replace(@moulds, char(13)+char(10), '')); select * from @table1 insert into @table2 select rtrim(ltrim(replace(bs.v1, char(9), '') )),a.xmlval1 from (select convert(xml, '<n>'+replace(replace(col1, ',', ','), ',', '</n><n>')+'</n>') as xmlval1 from @table1) a cross apply(select k.n.value('.', 'nvarchar(80)') v1 from a.xmlval1.nodes('n') k(n) ) bs where bs.v1 !=''; select * from @table2; 2、利用字符串拆解 declare @moulds varchar(4000); set @moulds='55-480730-03, 55-487780-01, , 55-487780-02 '; declare @table1 table(col1 nvarchar(4000)); declare @table2 table(col1 nvarchar(40), pos int); insert into @table1 values(replace(@moulds, char(13)+char(10), '')); select * from @table1; insert into @table2 select rtrim(ltrim(replace(substring(A.col1, B.number, charindex(',', A.col1+',', B.number)-B.number) , char(9), '') )) as col2, B.number from @table1 A inner join master..spt_values B on charindex(',', ','+A.col1, B.number)=B.number where B.type='P'; select * from @table2; 3、拆多列数据: --方式一 select a.ID, a.Col1, a.Col2, v1, v2 from ( select ID, Col1, Col2, convert(xml, '<n>' + replace(replace(Col1, ',', ','), ',', '</n><n>') + '</n>') as xmlval1 , convert(xml, '<n>' + replace(replace(Col2, ',', ','), ',', '</n><n>') + '</n>') as xmlval2 from @table1 ) a cross apply ( select k.n.value('.', 'nvarchar(80)') v1 from a.xmlval1.nodes('n') k(n) ) bs cross apply ( select k.n.value('.', 'nvarchar(80)') v2 from a.xmlval2.nodes('n') k(n) ) ns; --方式二 select ID, t.Col1,t.Col2, v1, v2 from @table1 as t cross apply ( values (convert(xml, '<n>' + replace(replace(Col1, ',', ','), ',', '</n><n>')+ '</n>'), convert(xml, '<n>' + replace(replace(Col2, ',', ','), ',', '</n><n>')+ '</n>')) ) a (xmlval1 , xmlval2 ) cross apply ( select k.n.value('.', 'varchar(80)') as v1 from a.xmlval1.nodes('n') k(n)) bs cross apply ( select k.n.value('.', 'varchar(80)') as v2 from a.xmlval2.nodes('n') k(n) ) ns; 现在大家对于SQL Server中对字符串拆分与合并的语句是什么的内容应该都有一定的认识了吧,希望这篇能对大家有所帮助。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐