如何在SQL Server中反转字符串

时间:2014-12-02 13:04:31

标签: sql sql-server stored-procedures

我在SQL中有一个字符串存储在类型为@result的{​​{1}}变量中,如下所示:

Varchar(MAX)

如何在不影响存储过程性能的情况下得到相反的结果。我希望在Attributes >> Items >> Category >> Package 的基础上打破字符串。

>>

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

使用分隔符>>将row_number分配到每一行,将字符串分成不同的部分。

然后Convert the rows into single string>>命令以desc分隔。

如果你有超过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

输出:

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

答案 2 :(得分:-3)

如果您正在运行SQL Server 2008或更高版本,请尝试:

    Select Reverse(@result)