sql-server – 反转TSQL中单词的顺序

我想知道如何(如果可能的话)颠倒从Tsql字符串(varchar)返回的单词的顺序.

我知道Tsql REVERSE函数,但也会反转单词中的字母,例如:

输入>我们想告诉大家,我们都喜欢StackOverflow
输出> wolfrevOkcatS evol lla ew uoy llet ot tnaw eW

我想在Tsql中实际实现以下功能

输入>我们想告诉大家,我们都喜欢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,CHARINDEX(' ',@source)) + ' ' + @dest
        SET @source = LTRIM(RTRIM(SUBSTRING(@source,@source)+1,LEN(@source))))
    END
    ELSE
    BEGIN
        SET @dest = @source + ' ' + @dest
        SET @source = ''
    END
END
SELECT @dest

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...