sql实现一列的多个结果合并成一个结果,并分割,使用xml for path

引用自:Sql Server 的FOR XML PATH(‘‘)函数用法_chpllp的博客-CSDN博客

 

 

 

1. 如下表:

2. 转换xml

1

select name from zz FOR XML PATH('root');

1

ps: FOR XML PATH('root')中root是xml根节点。<br><br><br><br>

 3. 加个分隔符和去掉根节点。

1

select '、' + name from zz FOR XML PATH('');

 

 4. 配合stuff函数使用,去掉第一个分隔符号。

1

select STUFF((select '、' + name from zz FOR XML PATH('')),1,1,'');

 

5. STUFF ( character_expression , start , length ,character_expression ) 

  character_expression:字符数据

  start :指定删除和插入的开始位置

  length :指定要删除的字符数

  character_expression : 替换start 到 length 的字符数据

6. 转义字符正常显示

有时候我们的数据库中有尖括号,然后有用到xml的时候,sql会自动的把尖括号进行转义,但是我们不需要转义,并且对这个有要求要用到,这时候我们可以用value的形式来实现,测试数据:

  1.  
    --测试数据
  2.  
    if not object_id(N'Tempdb..#T') is null
  3.  
    drop table #T
  4.  
    Go
  5.  
    Create table #T([ID] int,[Chemistry] nvarchar(47))
  6.  
    Insert #T
  7.  
    select 1,N'CaF<sub>2</sub>' union all
  8.  
    select 2,N'Al<sub>2</sub>O<sub>3<?sub>'
  9.  
    Go
  10.  
    --测试数据结束

用for xml path读取指标信息

  1.  
    SELECT
  2.  
    STUFF((
  3.  
    Select ','+Chemistry from #T FOR XML PATH('')),1,1,'')

读取的结果是这样的:

我们看到尖括号已经进行了转义,如果我们还想要尖括号,可以这样写:

  1.  
    SELECT
  2.  
    STUFF((
  3.  
    Select ','+Chemistry from #T FOR XML PATH(''),TYPE
  4.  
    ).value('.','NVARCHAR(MAX)')
  5.  
    ,1,1,'')

结果:

posted @ 2022-05-27 15:13  混子程序员ZMY  阅读(578)  评论(0编辑  收藏  举报