首页 > 解决方案 > 优化了 SQL SERVER 中逐字反转输入字符串的函数的替代代码

问题描述

alter FUNCTION FlipName(@input VARCHAR(250))
RETURNS VARCHAR(250)

AS BEGIN

DECLARE @i int ,@add varchar(255)
set @i=1
set @add=''
declare @work varchar(250)
set @work=''
WHILE @i <= len(@input)
BEGIN
  declare @pivot varchar(255)
  set @pivot=SUBSTRING(@input,@i,1)
  while @pivot <>' '
  begin
     set @add=@add+@pivot
     set @i=@i+1
     set @pivot=SUBSTRING(@input,@i,1)
  end

  set @work=@add+' '+@work 
  set @add=''

  SET @i = @i + 1

END
return @work
END

示例输入:我的名字是 Jarvis

示例输出:Jarvis 的名字是 My

我正在寻找更好、更短和更简洁的替代代码,因为这里的嵌套循环是性能杀手。

我正在寻找没有循环的更好的解决方法

请为您的解决方案提供一个简明的解释,说明它如何更好。

先感谢您

标签: sqlsql-servertsql

解决方案


T-SQL 不是字符串操作的最佳解决方案。但它完全可以在没有循环的情况下完成(SQL Server 2017+):

DECLARE @s NVARCHAR(MAX) = N'My name is Jarvis';

SELECT @s, STRING_AGG(value, ' ') WITHIN GROUP(ORDER BY rn DESC)
FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY 1/0)AS rn
      FROM STRING_SPLIT(REPLACE(@s, ' ', '.'), '.'))s;

DBFiddle 演示


推荐阅读