You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SQL XQuery从XML提取任务UID及逗号分隔的对应PredUID值

实现方案

该需求可以直接通过XQuery内置的string-join()函数实现,该函数支持将序列中的多个字符串用指定分隔符拼接,刚好匹配多PredUID逗号分隔的需求。


通用XQuery语句

针对你提供的XML结构,直接用以下XQuery即可输出预期格式:

for $task in /Tasks/Task
return concat(
  $task/UID/text(),
  ' ',
  string-join($task/Predecessor/PredUID/text(), ',')
)

逻辑说明:

  • 遍历每个<Task>节点
  • 先提取当前任务的UID文本值
  • 拼接空格后,用string-join把当前任务下所有<PredUID>的文本值用逗号拼接成单个字符串

SQL Server环境下的完整调用示例

如果是在SQL Server中执行,完整的SQL写法如下:

DECLARE @xml XML = N'
<Tasks>
 <Task>
  <UID>14</UID>
  <Name>Entertainment</Name>
  <ID>2</ID>
  <PerComp>22</PerComp>
  <Predecessor>
   <PredUID>12</PredUID>
   <PredType>1</PredType>
  </Predecessor>
 </Task>
 <Task>
  <UID>12</UID>
  <Name>Movie</Name>
  <ID>1</ID>
  <PerComp>55</PerComp>
  <Predecessor>
   <PredUID>13</PredUID>
   <PredType>1</PredType>
  </Predecessor>
  <Predecessor>
   <PredUID>14</PredUID>
   <PredType>1</PredType>
  </Predecessor>
 </Task>
 <Task>
  <UID>15</UID>
  <Name>Star</Name>
  <ID>3</ID>
  <PerComp>100</PerComp>
  <Predecessor>
   <PredUID>12</PredUID>
   <PredType>1</PredType>
  </Predecessor>
  <Predecessor>
   <PredUID>17</PredUID>
   <PredType>1</PredType>
  </Predecessor>
  <Predecessor>
   <PredUID>18</PredUID>
   <PredType>1</PredType>
  </Predecessor>
 </Task>
</Tasks>
'

-- 输出分栏格式结果
SELECT 
    T.Task.value('(UID/text())[1]', 'INT') AS UID,
    T.Task.query('string-join(Predecessor/PredUID/text(), ",")').value('.', 'VARCHAR(100)') AS PredUIDs
FROM @xml.nodes('/Tasks/Task') AS T(Task)

执行后输出结果完全匹配预期:

UIDPredUIDs
1412
1213,14
1512,17,18

如果需要直接输出空格分隔的单行格式,把SELECT部分改成下面的写法即可:

SELECT 
    T.Task.query('concat((UID/text())[1], " ", string-join(Predecessor/PredUID/text(), ","))').value('.', 'VARCHAR(100)') AS Result
FROM @xml.nodes('/Tasks/Task') AS T(Task)

内容的提问来源于stack exchange,提问作者Riyas Hussain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:30:02