gpt4 book ai didi

sql - SQL Server 中的 Stuff 和 'For Xml Path' 是如何工作的?

转载 作者:太空狗 更新时间:2023-10-30 01:36:40 30 4
gpt4 key购买 nike

表格是:

<表类="s-表"><头>编号姓名<正文>1啊啊啊1bb1抄送1dd1呃

要求的输出:

<表类="s-表"><头>编号abc<正文>1aaa,bbb,ccc,ddd,eee

查询:

SELECT ID, 
abc = STUFF(
(SELECT ',' + name FROM temp1 FOR XML PATH ('')), 1, 1, ''
)
FROM temp1 GROUP BY id

此查询工作正常。但我只需要解释它是如何工作的,或者是否有任何其他或更快捷的方法来做到这一点。

我对这一点感到很困惑。

最佳答案

这是它的工作原理:

<强>1。使用 FOR XML 获取 XML 元素字符串

在查询末尾添加 FOR XML PATH 允许您将查询结果输出为 XML 元素,元素名称包含在 PATH 参数中。例如,如果我们要运行以下语句:

SELECT ',' + name 
FROM temp1
FOR XML PATH ('')

通过传入一个空字符串(FOR XML PATH('')),我们得到以下内容:

,aaa,bbb,ccc,ddd,eee

<强>2。使用 STUFF 删除前导逗号

STUFF 语句字面意思是将一个字符串“填充”到另一个字符串中,替换第一个字符串中的字符。但是,我们只是使用它来删除结果值列表的第一个字符。

SELECT abc = STUFF((
SELECT ',' + NAME
FROM temp1
FOR XML PATH('')
), 1, 1, '')
FROM temp1

STUFF的参数是:

  • 要“填充”的字符串(在我们的例子中是带有前导逗号)
  • 开始删除和插入字符的位置(1,我们正在填充一个空字符串)
  • 要删除的字符数(1,是前导逗号)

所以我们最终得到:

aaa,bbb,ccc,ddd,eee

<强>3。加入 id 以获得完整列表

接下来我们将它加入到临时表中的 id 列表中,以获取具有名称的 ID 列表:

SELECT ID,  abc = STUFF(
(SELECT ',' + name
FROM temp1 t1
WHERE t1.id = t2.id
FOR XML PATH (''))
, 1, 1, '') from temp1 t2
group by id;

我们得到了结果:

<表类="s-表"><头>编号姓名<正文>1aaa,bbb,ccc,ddd,eee

关于sql - SQL Server 中的 Stuff 和 'For Xml Path' 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31211506/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com