gpt4 book ai didi

sql-server - 反转 T-SQL 中的单词顺序

转载 作者:行者123 更新时间:2023-12-04 02:55:46 25 4
gpt4 key购买 nike

我想知道如何(如果可能的话)反转从 T-SQL 字符串 (varchar) 返回的单词 的顺序。

我知道 T-SQL REVERSE 函数。但该函数还会反转单词中的字母,例如:

Input > 我们想告诉你我们都喜欢 StackOverflow
输出 > wolfrevOkcatS evol lla ew uoy llet ot tnaw eW

我想在 T-SQL 中实际实现以下目标:

Input > 我们想告诉你我们都喜欢 StackOverflow
输出 > Stackoverflow 喜欢你告诉我们想要的一切

我在任何地方发现的唯一稍微相似的问题是 this one ,但是这包括拆分逗号分隔的字符串,我不需要这样做。

我确信有一种方法可以实现上述目标,即使它是自定义函数或 SQL-CLR 函数也是如此。


我设法使用以下方法拆分了我的字符串:

-- Create a space delimited string for testing
declare @str varchar(max)
select @str = 'We want to tell you we all love StackOverflow'
-- XML tag the string by replacing spaces with </x><x> tags
declare @xml xml
select @xml = cast('<x><![CDATA['+ replace(@str,' ',']]></x><x><![CDATA[') + ']]></x>' as xml)
-- Finally select values from nodes <x> and trim at the same time
select ltrim(rtrim(mynode.value('.[1]', 'nvarchar(50)'))) as Code
from (select @xml doc) xx
cross apply doc.nodes('/x') (mynode)

现在的问题是试图以向后 (DESC) 顺序将所有内容重新组合成一个字符串。

最佳答案

您可以在 SQL 中创建一个小函数来反转如下所示的字符串:

DECLARE @source VARCHAR(MAX)
DECLARE @dest VARCHAR(MAX)
DECLARE @lenght INT

SET @source = 'We want to tell you we all love StackOverflow'
SET @dest = ''

WHILE LEN(@source) > 0
BEGIN
IF CHARINDEX(' ', @source) > 0
BEGIN
SET @dest = SUBSTRING(@source,0,CHARINDEX(' ', @source)) + ' ' + @dest
SET @source = LTRIM(RTRIM(SUBSTRING(@source,CHARINDEX(' ', @source)+1,LEN(@source))))
END
ELSE
BEGIN
SET @dest = @source + ' ' + @dest
SET @source = ''
END
END
SELECT @dest

关于sql-server - 反转 T-SQL 中的单词顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7684818/

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