27,579
社区成员
发帖
与我相关
我的任务
分享
create function qqq(@n varchar(100))
returns varchar(100)
as begin
declare @a int set @a=2
declare @aa int set @aa=1
declare @c varchar(100)
declare @b varchar(100) declare @bb varchar(100)
declare @d int set @d=LEN(@n)
while @a<=@d begin
set @b = substring(@n,@a,1)
while @aa<@a begin
set @bb = substring(@n,@aa,1)
if(@b>@bb) begin
select REPLACE(@n,@b,@bb)
select REPLACE(@n,@bb,@b)
set @aa=@aa+1
end
set @a=@a+1
end
set @c=@n
end return @c
end
CREATE FUNCTION qqq
(
@n VARCHAR(100)
)
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @a INT
SET @a = 2
DECLARE @aa INT
SET @aa = 1
DECLARE @c VARCHAR(100)
DECLARE @b VARCHAR(100)
DECLARE @bb VARCHAR(100)
DECLARE @d INT
SET @d = LEN(@n)
WHILE @a <= @d
BEGIN
SET @b = SUBSTRING(@n, @a, 1)
WHILE @aa < @a
BEGIN
SET @bb = SUBSTRING(@n, @aa, 1)
IF (@b > @bb)
BEGIN
set @n=REPLACE(@n, @b, @bb)
SET @n= REPLACE(@n, @bb, @b)
SET @aa = @aa + 1
END
SET @a = @a + 1
END
SET @c = @n
END
RETURN @c
END
改成这样就可以了,但好像你里面的逻辑有点问题。你可以看看我下面的分析,我也不太确定是不是这个意思哈
WHILE @aa < @a --直接死循环了,@aa永远比@a小1
BEGIN
SET @bb = SUBSTRING(@n, @aa, 1)
IF (@b > @bb)
BEGIN
set @n=REPLACE(@n, @b, @bb)
SET @n= REPLACE(@n, @bb, @b)
SET @aa = @aa + 1 --就算@b>@bb成立,刚开始@aa也就从1变成了2
END
END
SET @a = @a + 1 --@a加1又变成了3,然后While @aa < @a一直循环下去了,因为2永远小于3,3永远小于4。。。。。
那把end的位置调节一下是不是就不会陷入死循环了?
CREATE FUNCTION qqq
(
@n VARCHAR(100)
)
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @a INT
SET @a = 2
DECLARE @aa INT
SET @aa = 1
DECLARE @c VARCHAR(100)
DECLARE @b VARCHAR(100)
DECLARE @bb VARCHAR(100)
DECLARE @d INT
SET @d = LEN(@n)
WHILE @a <= @d
BEGIN
SET @b = SUBSTRING(@n, @a, 1)
WHILE @aa < @a
BEGIN
SET @bb = SUBSTRING(@n, @aa, 1)
IF (@b > @bb)
BEGIN
set @n=REPLACE(@n, @b, @bb)
SET @n= REPLACE(@n, @bb, @b)
SET @aa = @aa + 1
END
SET @a = @a + 1
END
SET @c = @n
END
RETURN @c
END
改成这样就可以了,但好像你里面的逻辑有点问题。你可以看看我下面的分析,我也不太确定是不是这个意思哈
WHILE @aa < @a --直接死循环了,@aa永远比@a小1
BEGIN
SET @bb = SUBSTRING(@n, @aa, 1)
IF (@b > @bb)
BEGIN
set @n=REPLACE(@n, @b, @bb)
SET @n= REPLACE(@n, @bb, @b)
SET @aa = @aa + 1 --就算@b>@bb成立,刚开始@aa也就从1变成了2
END
SET @a = @a + 1 --@a加1又变成了3,然后While @aa < @a一直循环下去了,因为2永远小于3,3永远小于4。。。。。
END