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

我知道TSQL REVERSE函数,但是也可以反转单词中的字母,例如:

输入> We want to tell you we all love StackOverflow
输出> wolfrevOkcatS evol lla ew uoy llet ot tnaw eW

我想在TSQL中实现以下目标:

输入> We want to tell you we all love StackOverflow
输出> Stackoverflow love all we you tell to want We

我在任何地方都发现的唯一稍微相似的问题是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

10-08 15:00