如何在SQL Server中反转字符串

3

我有一个存储在SQL中的字符串,存储在@result变量中,类型为Varchar(MAX),内容如下:

Attributes >> Items >> Category >> Package

如何在不影响存储过程性能的情况下获取其反向结果。我想根据>>分隔符拆分字符串。

Package >> Category >> Items >> Attributes 

1
字符串中最多有四个元素吗? - Gordon Linoff
3个回答

3

如果字符串中最多有四个项目且没有包含句点,则可以使用PARSENAME()函数。

select (parsename(replace(@result, ' >> ', '.'), 1) + ' >> ' +
        parsename(replace(@result, ' >> ', '.'), 2) + ' >> ' +
        parsename(replace(@result, ' >> ', '.'), 3) + ' >> ' +
        parsename(replace(@result, ' >> ', '.'), 4)
       )

另一种选择是将字符串拆分并重新构建。

1
每当您向过程中添加任何类型的代码时,都会影响性能。此解决方案非常快速,因此影响应该很小,甚至不太可能被注意到。 - Sean Lange

1
使用分隔符>>将字符串拆分为不同的部分,并为每行分配行号。
然后,通过>>按降序排序将行转换为单个字符串。
如果有超过4个元素,则应该起作用。
DECLARE @output VARCHAR(5000)='',
        @String VARCHAR(5000)='Attributes >> Items >> Category >> Package'

SELECT @output += splt_data + ' >> '
FROM  (SELECT Row_number()
                OVER(
                  ORDER BY (SELECT NULL))                       rn,
              Rtrim(Ltrim(Split.bb.value('.', 'VARCHAR(100)'))) splt_data
       FROM   (SELECT Cast ('<M>' + Replace(@String, '>>', '</M><M>')
                            + '</M>' AS XML) AS Data) AS A
              CROSS APPLY Data.nodes ('/M') AS Split(bb)) ou
ORDER  BY rn DESC

OUTPUT :

SELECT LEFT(@output, Len(@output) - 3) --Package >> Category >> Items >> Attributes

-3
如果您正在运行SQL Server 2008或更新版本,请尝试以下操作:
    Select Reverse(@result)

包 << 类别 << 项目 << 属性。那是输出吗? - knkarthick24
2
egakcaP >> yrogetaC >> smetI >> setubirttA反转字符串 >> 抽取字符 >> 倒序排列 >> 属性设置 - Dgan
他说字符串存储在他的变量中。如果他想要将该字符串反转,最简单的方法是使用系统函数REVERSE(string_expression)。 - Anthony R Gray
这与OP所述的要求相差甚远。 - Sean Lange
问题是要反转字符串中的单词,而不是字符串中的字母。 - Pedro Polonia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接