gpt4 book ai didi

sql - SQL 中的 Stuff 工作原理或 Stuff 逻辑和 XML 路径

转载 作者:数据小太阳 更新时间:2023-10-29 01:44:09 27 4
gpt4 key购买 nike

我的输出是正确的,但我想知道 STUFF 的实际工作原理。

我有一个简单的查询,它返回 @startDate@endDate 之间的总月数。

STUFF 的帮助下,我将那几个月存储到 @cols 中。

查询是这样的:

SELECT DISTINCT ',' 
+ Quotename(CONVERT(CHAR(10), startdate, 120))
FROM #tempdates
  1. ","在查询中应该在值之前打印,但它打印如下 O/P。
  2. 如果我从内容中删除 XML 路径,我将得到空值。
  3. STUFF 如何与 XML 路径一起工作

这是我的输出:

enter image description here

 DECLARE @cols AS NVARCHAR(MAX),   
@query AS NVARCHAR(MAX),
@startdate datetime = '1-Jan-2014',
@enddate datetime = '1-Jun-2014'

;with cte (StartDate, EndDate) as
(
select min(@startdate) StartDate, max(@enddate) EndDate
union all
select dateadd(mm, 1, StartDate), EndDate
from cte
where StartDate < EndDate
)
select StartDate
into #tempDates
from cte

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(convert(CHAR(10), StartDate, 120))
from #tempDates
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')


select @cols
drop table #tempDates

最佳答案

Stuff 作用于字符串,它对你的 SQL 所做的唯一一件事就是从位置 1 中删除初始逗号。没有东西它看起来像 ,a,b,c,d 但是当你用空值填充位置 1 时它将它转换为 a,b,c,d

您的问题可能更多地是关于 FOR XML 正在做什么。在这种情况下,FOR XML 被用作一种“技巧”,将来自 #tempDates 的所有行连接成一个逗号分隔的长字符串 ,a,b,c ,d 和东西只是删除第一个逗号。

因为 xml 正在创建一个字符串 x = ',a' + ',b' +',c' + ',d' 所以 x 最终为 ',a,b,c,d'

Stuff(x,1,1,'') 仅将位置 1 到 1 中的逗号替换为 '' 因此现在是 x='a,b,c,d'

[STUFF ( character_expression , start , length , replaceWith_expression )]

关于sql - SQL 中的 Stuff 工作原理或 Stuff 逻辑和 XML 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25010161/

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