【SQLSERVER】处理字段逗号分隔 分别取值问题

时间:2019-09-17
本文章向大家介绍【SQLSERVER】处理字段逗号分隔 分别取值问题,主要包括【SQLSERVER】处理字段逗号分隔 分别取值问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

之前遇到 数据库字段保存的数据是 1,2,3 这种格式的数据 要根据逗号分别分隔并取 1、2、3分别对应的中文值。

网上查找一下方法 记录一下 这些方法:用charindex和for xml path实现批量替换的功能,适用于sql server 2005及以上版本

微软官方文档charindex用法:https://docs.microsoft.com/zh-cn/sql/t-sql/functions/charindex-transact-sql?redirectedfrom=MSDN&view=sql-server-2017

微软官方文档for xml path用法:https://docs.microsoft.com/zh-cn/sql/t-sql/queries/select-for-clause-transact-sql?redirectedfrom=MSDN&view=sql-server-2017

参考地址:

https://zhidao.baidu.com/question/1046243361841961459.html

最终实现的sql语句如下:

可以根据自己的情况 将table1和table2替换成自己需要的表,字段也要替换成要替换的表。

--测试数据
with table1(id,code) as (
select 1,'001' union all
select 2,'001,002' union all
select 3,'001,002,003'),
table2(code,name) as(
select '001','数学' union all
select '002','体育' union all
select '003','美术')
 
--用charindex和for xml path实现批量替换的功能,适用于sql server 2005及以上版本
select table1.id,stuff((
    select ','+table2.name from table2
    where charindex(','+table2.code+',',','+table1.code+',')>0
    order by table2.code
    for xml path('')
    ),1,1,'') as name 
from table1

下面还有其他的一些方式 ,但是没有实现我想要的情况 ,结果会按照 比如说字符串内容含有,‘12,1,2’这样的 其中12会被分隔成1,2和12这样就不满足我的要求。

参考地址:https://wenku.baidu.com/view/f418d83258fb770bf78a5569.html

原文地址:https://www.cnblogs.com/SignX/p/11531842.html