泰安市网站建设公司,以公司名称为后缀的邮箱,个人网页制作成品代码免费,网站可以做多少个网页点击上方蓝字关注我 在数据数据过程中经常会遇到数据按照一定字符进行拆分#xff0c;而在不同版本的SQL SERVER数据库中由于包含的函数不同#xff0c;处理的方式也不一样。本文将列举2个版本的数据库中不同的处理方法。 1. 使用 XML 方法 在SQL SERVER 2016版本之前#x… 点击上方蓝字关注我 在数据数据过程中经常会遇到数据按照一定字符进行拆分而在不同版本的SQL SERVER数据库中由于包含的函数不同处理的方式也不一样。本文将列举2个版本的数据库中不同的处理方法。 1. 使用 XML 方法 在SQL SERVER 2016版本之前因为没有直接进行数据拆分的方法因此需要通过其他方式来解决以下是案例: 首先我们考虑以下的案例。我们有一个临时表 #Tab包含两列 Col1 和 Col2其中 Col2 是逗号分隔的字符串。 -- 创建临时表
if object_id(tempdb..#Tab) is not null drop table #Tab;
if object_id(tempdb..#test) is not null drop table #test;
gocreate table #Tab ([Col1] int, [COl2] nvarchar(5));
goinsert #Tab
select 1, Na,b,c union all
select 2, Nd,e union all
select 3, Nf;
go-- 按照逗号拆分
select a.COl1, b.Col2, row_number() over (partition by COl1 order by COl1) as ID
into #test
from (select Col1, COl2convert(xml, root vreplace(COl2,,, /v v) /v /root) from #Tab) a
outer apply (select Col2C.v.value(.,nvarchar(100)) from a.COl2.nodes(/root/v) C(v)) b;-- 重新组合相同 COl1 值的数据
select c.Col1, case when COl2 then NULL else LEFT(COl2, LEN(COl2)-1) end as COl2
from (select Col1,(select COl2,from #test where COl1 b.COl1 order by ID asc for xml path()) as COl2from #test b group by Col1
) c;-- 结果展示
select * from #test;
select * from #Tab;-- 清理临时表
if object_id(tempdb..#Tab) is not null drop table #Tab;
if object_id(tempdb..#test) is not null drop table #test; 2. 使用 STRING_SPLIT 函数 现在我们看一下第二种方法使用 SQL Server 2016 及更新版本引入的 STRING_SPLIT 函数。 -- 创建临时表
if object_id(tempdb..#Tab) is not null drop table #Tab;
if object_id(tempdb..#test) is not null drop table #test;
gocreate table #Tab ([Col1] int, [COl2] nvarchar(5));
goinsert #Tab
select 1, Na,b,c union all
select 2, Nd,e union all
select 3, Nf;
go-- 使用 STRING_SPLIT 拆分数据
select Col1, value as Col2, row_number() over (partition by Col1 order by Col1) as ID
into #test
from #Tab
cross apply string_split(COl2, ,);-- 重新组合相同 COl1 值的数据
select Col1, string_agg(Col2, ,) as Col2
from #test
group by Col1;-- 结果展示
select * from #test;
select * from #Tab;-- 清理临时表
if object_id(tempdb..#Tab) is not null drop table #Tab;
if object_id(tempdb..#test) is not null drop table #test; 3. 小结 无论是使用 XML 数据方法还是使用 STRING_SPLIT 函数都可以有效地处理 SQL Server 中的逗号分隔值。选择哪种方法取决于你的数据库版本和个人偏好。希望这篇文章对你在 SQL Server 中处理逗号分隔值时有所帮助。如果有任何问题或疑问请随时在评论中留言。感谢阅读 往期精彩回顾 1. MySQL高可用之MHA集群部署 2. mysql8.0新增用户及加密规则修改的那些事 3. 比hive快10倍的大数据查询利器-- presto 4. 监控利器出鞘PrometheusGrafana监控MySQL、Redis数据库 5. PostgreSQL主从复制--物理复制 6. MySQL传统点位复制在线转为GTID模式复制 7. MySQL敏感数据加密及解密 8. MySQL数据备份及还原一 9. MySQL数据备份及还原二 扫码关注