sql - 优化了 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
我正在寻找更好、更短和更简洁的替代代码,因为这里的嵌套循环是性能杀手。
我正在寻找没有循环的更好的解决方法
请为您的解决方案提供一个简明的解释,说明它如何更好。
先感谢您
解决方案
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;
推荐阅读
- reactjs - 如何使用本地存储访问组合的 reducer 值 React-Redux
- spring-boot - Spring Boot如何在运行时重用现有连接更改数据库?
- python - 替换默认管理站点时模块未定义类错误
- css - Flex wrap 仅在我取消选中并签入检查元素时才起作用
- c++ - 多个返回语句
- javascript - discord.js 停止机器人在错误后关闭
- graphql - 类型 graphql - 无视多态类型
- r - 使用 R 中的 Plotly 包绘制具有两个名义变量的散点图
- python - 我不知道为什么这个用于替换所有出现的子字符串的 python 代码不起作用
- mysql - 在更新 laravel 中的记录时出现问题,它显示找不到页面