gpt4 book ai didi

sql-server - 将有序 String_Split 的结果连接到变量中

转载 作者:行者123 更新时间:2023-12-01 09:50:49 28 4
gpt4 key购买 nike

在我使用的 SqlServer 数据库中,数据库名称类似于 StackExchange.Audio.Meta , 或 StackExchange.AudioStackOverflow .幸运的是,这也是网站的 url。我只需要在点上拆分并反转​​它:meta.audio.stackexchange .添加 http://.com我已经完成了。显然Stackoverflow不需要任何倒车。
使用 SqlServer 2016 string_split我可以轻松拆分和重新排序其结果的功能:

select value
from string_split(db_name(),'.')
order by row_number() over( order by (select 1)) desc
这给了我
|  Value        |
-----------------
| Meta |
| Audio |
| StackExchange |
因为我需要将 url 放在一个变量中,所以我希望使用这个 answer 来连接它所以我的尝试是这样的:
declare @revname nvarchar(150)
select @revname = coalesce(@revname +'.','') + value
from string_split(db_name(),'.')
order by row_number() over( order by (select 1)) desc
然而,这只会返回最后一个值, StackExchange .我已经注意到该答案上的警告,该技巧仅适用于某些执行计划,如 here 所述。 .
问题似乎是由 order by 引起的条款。没有它,我会得到所有值,但顺序错误。我尝试添加 ltrimrtrim Microsoft 文章中建议的功能以及子查询,但到目前为止还没有运气。
有没有办法可以插入 Sql Server 2016 查询引擎连接来自 string_split 的有序结果?在一个变量?
我知道我可以使用 for XML甚至是一个普通的光标来获得我需要的结果,但我还不想放弃这个优雅的解决方案。
当我在 Stack Exchange Data Explorer 上运行它时,我无法使用函数,因为我们没有创建这些函数的权限。我可以做存储过程,但我希望我可以避开那些。
我准备了一个 SEDE Query实验。期望的数据库名称要么没有点,也就是 StackOverflow ,带 1 个点: StackOverflow.Meta或 2 个点,`StackExchange.Audio.Meta,数据库的完整列表是 here

最佳答案

我认为你把事情复杂化了。您可以使用 PARSENAME :

SELECT 'http://' + PARSENAME(db_name(),1) + 
ISNULL('.' + PARSENAME(db_name(),2),'') + ISNULL('.'+PARSENAME(db_name(),3),'')
+ '.com'

关于sql-server - 将有序 String_Split 的结果连接到变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38129614/

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