我们有一串字符串,比如:
declare @source varchar(max)= 'abcdefghijklmnopqrstuvwxyz'
现想把它反转显示:
zyxwvutsrqponmlkjihgfedcba
此时,你可以写一个方法来处理:
set ansi_nulls on
go
set quoted_identifier on
go
-- =============================================
-- author: insus.net
-- create date: 2019-05-16
-- update date: 2019-05-16
-- description: 反转字符
create function [dbo].[svf_reversestring] (
@source varchar(max)
)
returns nvarchar(max)
as
begin
declare @destination varchar(max) = ''
while len(@source) > 0
begin
if len(@source) = 0
begin
set @destination = @source + @destination
set @source = ''
end
else
begin
set @destination = substring(@source, 1, 1) + @destination
set @source = substring(@source, 2, len(@source))
end
end
return @destination
end
go
举例运行上面的方法:
哈哈,一切都是白忙,因为microsoft 已经提供有一个现型的方法reverse:
以上不管是哪一个方法,对下面这种情况进行反转,不知是否ok? 字符串以空格为单词进行反转。
因此,得写另外一个方法来处理:
set ansi_nulls on
go
set quoted_identifier on
go
-- =============================================
-- author: insus.net
-- create date: 2019-05-16
-- update date: 2019-05-16
-- description: 反转函数
create function [dbo].[svf_reverse] (
@source varchar(max)
)
returns nvarchar(max)
as
begin
declare @destination varchar(max) = ''
while len(@source) > 0
begin
if charindex(' ', @source) > 0
begin
set @destination = substring(@source, 0, charindex(' ', @source)) + ' ' + @destination
set @source = ltrim(rtrim(substring(@source, charindex(' ', @source) + 1, len(@source))))
end
else
begin
set @destination = @source + ' ' + @destination
set @source = ''
end
end
return @destination
end
go