Apq*_*pqu 2 t-sql sql-server sql-server-2005 sqlclr
我想知道如何(如果可能的话)颠倒从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
我在任何地方找到的唯一一个稍微类似的问题是这个,但是包括拆分逗号分隔的字符串,我不需要这样做.
我确信有一种方法可以实现上述目标,即使它是自定义函数或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)
Run Code Online (Sandbox Code Playgroud)
现在的问题是尝试将它们全部重新组合成一个以向后(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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6707 次 |
最近记录: |