
在数据数据过程中经常会遇到数据按照一定字符进行拆分,而在不同版本的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;
go
create table #Tab ([Col1] int, [COl2] nvarchar(5));
go
insert #Tab
select 1, N'a,b,c' union all
select 2, N'd,e' union all
select 3, N'f';
go
-- 按照逗号拆分
select
a.COl1, b.Col2, row_number() over (partition by COl1 order by COl1) as ID
into #test
from
(select Col1, COl2=convert(xml,' <root> <v>'+replace(COl2,',',' </v> <v>')+' </v> </root>') from #Tab) a
outer apply
(select Col2=C.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 COl2
from #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;
go
create table #Tab ([Col1] int, [COl2] nvarchar(5));
go
insert #Tab
select 1, N'a,b,c' union all
select 2, N'd,e' union all
select 3, N'f';
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 中处理逗号分隔值时有所帮助。如果有任何问题或疑问,请随时在评论中留言。感谢阅读!

2. mysql8.0新增用户及加密规则修改的那些事
3. 比hive快10倍的大数据查询利器-- presto
4. 监控利器出鞘:Prometheus+Grafana监控MySQL、Redis数据库
5. PostgreSQL主从复制--物理复制
6. MySQL传统点位复制在线转为GTID模式复制




文章转载自数据库干货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
SQL优化 - explain查看SQL执行计划(一)
金同学
442次阅读
2025-03-13 16:04:22
金仓数据库26套!宁波市司法局信息系统适配改造(一期)采购项目
天下观查
344次阅读
2025-03-21 10:33:59
国产化+性能王炸!这套国产方案让 3.5T 数据 5 小时“无感搬家”
YMatrix
343次阅读
2025-03-13 09:51:26
大连农商40万,采购Greenplum数据库原厂订阅服务
天下观查
295次阅读
2025-03-13 09:52:29
最近我为什么不写评论国产数据库的文章了
白鳝的洞穴
243次阅读
2025-04-07 09:44:54
为什么总是很难客观评价某个国产数据库产品
白鳝的洞穴
201次阅读
2025-03-19 11:21:09
国产数据库高光时刻!天翼云TeleDB荣登TPC-DS全球测评总榜第二
天翼云开发者社区
199次阅读
2025-03-13 17:24:48
云和恩墨钟浪峰:安全生产系列之SQL优化安全操作
墨天轮编辑部
194次阅读
2025-03-31 11:08:20
史诗级革新 | Apache Flink 2.0 正式发布
严少安
178次阅读
2025-03-25 00:55:05
同一条SQL开发环境比生产环境执行速度快案例分享
董小姐
171次阅读
2025-03-20 06:50:49